我试图在使用for循环的情况下迭代超过2个std::vectors,但得到了错误。迭代超过一个向量时,当我在for循环中放置另一个迭代器时,不知道出了什么问题。
#include<iostream>
#include<vector>
int main()
{
std::vector<double> x={1,2,3,4,5}, d={10,11,12,13,14},x1,x2;
/*for (std::vector<double>::iterator it1 = x.begin(),std::vector<double>::iterator it2 = d.begin();
it1!=x.end(),it2!=d.end(); ++it1,++it2 )
{
x1.push_back(*it1 + (*it2));
x2.push_back(*it1 + (*it2));
}*/
for (std::vector<double>::iterator it1 = x.begin();it1!=x.end(); ++it1 )
{
x1.push_back(*it1 );
}
return 0;
}注释掉的代码有多个错误:qualified-id in declaration before ‘it2’ for (std::vector<double>::iterator it1 = x.begin(),std::vector<double>::iterator it2 = d.begin());,有人能解释这里有什么问题吗?
发布于 2019-07-15 23:38:52
for循环的第一部分是一个正常的声明,就像上面在一行中声明和定义多个向量一样。只写一次类型:
for (std::vector<double>::iterator it1 = x.begin(), it2 = d.begin();
it1!=x.end() && it2!=d.end();
++it1, ++it2)
{
x1.push_back(*it1 + (*it2));
x2.push_back(*it1 + (*it2));
}循环条件中还有一个错误:使用&&而不是,,否则这是一个逗号操作符,其结果只是最后一部分。
最后,现在习惯上使用auto而不是写出那些长类型:
for (auto it1 = x.begin(), it2 = d.begin();
it1 != x.end() && it2 != d.end();
++it1, ++it2)
{
x1.push_back(*it1 + (*it2));
x2.push_back(*it1 + (*it2));
}发布于 2019-07-15 23:36:47
当使用逗号(,)声明多个变量时,只需要指定一次类型。改变这一点:
for (std::vector<double>::iterator it1 = x.begin(), std::vector<double>::iterator it2 = d.begin();对此:
for (std::vector<double>::iterator it1 = x.begin(), it2 = d.begin();或者更好--既然您使用的是c++11,请使用auto
for (auto it1 = x.begin(), it2 = d.begin();这样可以消除编译器错误,但在这里仍然有一个逻辑错误:
it1!=x.end(),it2!=d.end(); ++it1,++it2 )您正在丢弃it1!=x.end()。在表达式中,逗号运算符计算每个表达式,但只计算最后一个表达式。将,更改为&&,如下所示:
it1!=x.end() && it2!=d.end(); ++it1,++it2 )你可以走了。
发布于 2019-07-15 23:37:52
https://stackoverflow.com/questions/57048288
复制相似问题