【问题标题】:Comparing different vectors比较不同的向量
【发布时间】:2013-11-10 02:14:22
【问题描述】:

我正在尝试编写一些代码来逐个元素地比较向量。假设我有三个 int 向量:

v1 = 1,2,3,4,5,6,7,8,9,10

v2 = 1,2,3,4,5,6,7,8,9,10

v3 = 1,2,3,4,5,6,7,8,9,10

我想逐个元素地比较这三个元素 - 所以比较 v1[0]、v2[0]、v3[0]。然后是 v1[1]、v2[1]、v3[1] 等等。这在 C++ 中怎么可能?我在谷歌上找不到任何似乎能够做到这一点的地方。也许我应该将向量设为二维数组并处理列?

谢谢, 本。

【问题讨论】:

  • 三通比较后需要做什么?比较很容易 - std::vectors 提供了 < 运算符的实现。
  • 根据您对该语言中其他事物通常如何比较的了解进行猜测。
  • “比较向量”是什么意思?顺序重要吗?为什么一个简单的 for 循环不能满足你的需要?
  • 你几乎回答了你自己的问题。逐个元素比较它们,第一个元素 0,然后元素 1,等等。
  • 我的问题是我事先不知道要比较多少个向量,但我想知道每个位置,如果所有向量中的值都相同。跨度>

标签: c++ arrays vector comparison


【解决方案1】:

试试这个:

bool vectors_are_equal = false;
const unsigned int size = v1.size();
for (unsigned int i = 0; i < size; ++i)
{
  if ((v1[i] == v2[i]) && (v2[i] == v3[i]))
  {
     continue;
  }
  else
  {
     break;
  }
}
if (i >= size)
{
  vectors_are_equal == true;
}

【讨论】:

    【解决方案2】:

    Thomas Matthews,您的代码无法编译。这是工作示例:

    bool areVectorsEqual(const std::vector<int>& v1, const std::vector<int>& v2, const std::vector<int>& v3) {
      if (v1.size() != v2.size() || v2.size() != v3.size()) {
        return false;
      }
    
      for (int i = 0; i < v1.size(); i++) {
        if (v1[i] != v2[i] || v2[i] != v3[i]) {
          return false;
        }
      }
    
      return true;
    }
    

    您可以改进这一点,允许比较 n 个向量。

    【讨论】:

      猜你喜欢
      • 2012-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多