【问题标题】:How to check for equality between elelements in a vector [closed]如何检查向量中元素之间的相等性[关闭]
【发布时间】:2020-12-21 20:14:29
【问题描述】:

我有这个向量

std::vector<int> vec = {3,4,5,5};

我想检查向量中元素之间的相等性。在这种情况下,5 等于 5。我想将这些元素存储在另一个向量中,并将它们的位置(偏移量)保存在另一个变量中。

编辑://这不起作用

std::vector<int> vec = {3, 4, 5, 5};
std::vector<int> store;
std::vector<int> offset;

int len = vec.size();

for(int count = 0; count + 1 < len; count++)
{
  if(vec.at(count) == vec.at(count + 1))
  {
     store.push_back(vec.at(count));
     offset = count;
  }
}
    

输出应该是:

store = {5,5};
offset.at(0) = 2;
offset.at(1) = 3;

【问题讨论】:

  • 实际上是什么阻止了你vec[2] == vec[3]??
  • 我想比较一下 for 循环中的元素吧?因为我有很多向量而且我不知道它们的元素,所以这只是我真正想做的一个例子。 :)
  • @malicization 好吧,将23 替换为ii + 1,并在这样做时注意(i + 1) &lt; vec.size()
  • @πάνταῥεῖ 我真的不明白你所描述的,因为我无法在 for 循环中将 i 与 i+1 进行比较

标签: c++ vector element equality


【解决方案1】:

这将计算重复,但不相邻。

int main()
{
    std::vector<int> vec = {3, 4, 5, 5, 7, 8, 8};
    std::vector<int> store;
    std::vector<int> offset;

    int pos {0};

    for (auto v : vec)
    {
        int c = std::count(vec.begin(), vec.end(), v);
        if (c > 1) {
            store.push_back(v);
            offset.push_back(pos);
        }
        ++pos;
    }
    for (auto v : store)
        std::cout << "Repeated: " << v << std::endl;

    for (auto v : offset)
        std::cout << "Offsets: " << v << std::endl;
    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-12
    • 2013-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    相关资源
    最近更新 更多