比较两个向量的元素

时间:2016-08-27 20:47:06

标签: c++ c++11 vector

我是c ++的新手并试图理解向量,我的要求是比较两个向量中每个索引的值。

下面是适用于数组但不适用于标准矢量类的伪代码,数组大小可以通过

计算
mySize = sizeof(array)/sizeof(int);

for(int i = 0;i<mySize;i++)
{
  if(a[i] == b[i])
  {
  std::cout <<": Match ";
  }
  else
  {
   std::cout <<":Doesnt Match" ;
  }

}

但是当我试图使用矢量时,它并不是那么简单

1.基于范围的循环是否适用于上述场景? 2.如何获得向量的大小,下面的代码实际上显示的内存比我创建的多, 可能std :: vector vet默认分配额外的空间

 std::vector<int> vec;
 vec.push_back( -10 );
 vec.push_back( -20 );
 vec.push_back( -20 );
 vec.push_back( -20 );
 vec.push_back( -20 );
 for (int i=0;i<sizeof(vec);i++)
 {
     std::cout<<vec[i]<<"\t";    
 }

 output :

 10 -20 -20 -20 -20 0   0   0   0   0   0   0   0   0   0   0   0   0      0    0   0   0   0   0

评论后的代码更新

std::vector<int> vec;
vec.push_back( -10 );
vec.push_back( -20 );
vec.push_back( -20 );
vec.push_back( -20 );
vec.push_back( -20 )

std::vector<int> vec1;
vec1.push_back( -20 );
vec1.push_back( -20 );
vec1.push_back( -20 );
vec1.push_back( -20 );

for (int i=0;i<vec.size();i++)
{
    if(vec[i] ==  vec1[i])
    {
      std::cout<<vec[i]<<"\t"<<vec1[i]<<": Match: \n";
    }
    else {
      std::cout<<vec[i]<<"\t"<<vec1[i]<<":Doesnt Match: \n";
    }

}

输出

-10 -20:Doesnt Match: 
-20 -20: Match: 
-20 -20: Match: 
-20 -20: Match: 
-20 -20: Match: 

这里打印的输出实际上是错误的,因为我们在第二个向量中只有4个元素,但输出显示它有5个元素。 有什么建议吗?

2 个答案:

答案 0 :(得分:2)

std::vector定义operator ==,因此您只需比较它们:

  if (a == b)
  {
    std::cout <<": Match ";
  }
  else
  {
    std::cout <<":Doesnt Match" ;
  }

如果您仍想比较每个元素 -

  • 要获得vector的尺寸,请执行vec.size(),而不是sizeof

  • 但首先要比较两个向量的大小。如果它不相同那么矢量显然是不一样的。

答案 1 :(得分:0)

您必须使用vec.at(i)代替vec[i]。因为在索引i=4的第二种情况下,您将调用向量vec1的不存在元素,只有4个元素[0,1,2,3]。这种操作的结果是不确定的! 如果你将使用vec.at(i)函数,它将不允许除了向量数组边界之外。

for循环也是错误的,你必须得到编译器的警告。 对于向量,它应该是这样的:

for(vector<int>::size_type i=0; i<vec.size(); ++i) { .... }