我是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个元素。 有什么建议吗?
答案 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) { .... }