c ++在for循环中初始化2个不同的迭代器

Der*_*rek 14 c++ iterator initialization

可能重复:
我可以在for循环的初始化中声明不同类型的变量吗?

我想在c ++中有一个for循环,它在初始化中构造了两种不同类型的向量迭代器.

这是我想要的大致想法:

std::vector<double> dubVec;
std::vector<int> intVec;
double result = 0;

dubVec.push_back(3.14);
intVec.push_back(1);

typedef std::vector<int>::iterator intIter;
typedef std::vector<double>::iterator dubIter;

for (intIter i = intVec.begin(), dubIter j = dubVec.begin(); i != intVec.end(); ++i, ++j)
{
  result += (*i) * (*j);
}
Run Code Online (Sandbox Code Playgroud)

任何人都知道在这种情况下要做的标准是什么?我不能只为intVec使用double的向量,因为我正在寻找一个通用的解决方案.[即我可能有一些函数f,它将int加倍,然后计算f(*i)*(*j)]

hmj*_*mjd 31

您可以声明一个std::pairwith firstsecond作为迭代器类型:

for (std::pair<intIter, dubIter> i(intVec.begin(), dubVec.begin());
     i.first != intVec.end() /* && i.second != dubVec.end() */;
     ++i.first, ++i.second)
{
    result += (*i.first) * (*i.second);
}
Run Code Online (Sandbox Code Playgroud)


Luc*_*ore 7

您不能在for循环内声明不同类型的变量.

只需在外面宣布:

intIter i = intVec.begin();
dubIter j = dubVec.begin();
for (; i != intVec.end(); ++i && ++j)
{
}
Run Code Online (Sandbox Code Playgroud)

  • 什么是`++ i && ++ j`?使用逗号. (4认同)