【发布时间】:2021-09-17 22:25:56
【问题描述】:
我有两个长度相同的向量。其中一个拥有 double 向量:
std::vector<std::vector<double>> A;
第二个是双打
std::vector<double> B;
“相同长度”是指 A 包含的 double 向量与 B 包含 double 的向量一样多。 我想同时用一个迭代器遍历它们。我有一种感觉,我需要创建一个类来做到这一点。类似的东西
std::vector<vector<double>>::iterator iter = A.begin();
for (A= iter.begin(); iter != A.end(); iter++)
{
(*iter).A // I access an element of A std::vector<double>
(*iter).B // I access an element of B (double)
}
我检查了一个类似的问题,这个问题非常接近我想要做的:C++ iterating over 2 vectors using for loop
但在我的情况下,迭代器有两种不同的类型,分别是std::vector<vector<double>>::iterator和vector<double>::iterator,所以这个问题的解决方案不起作用,但我想它是非常接近的。
我该怎么做?最好的方法是什么?
【问题讨论】:
-
不只使用下标的原因是什么?此外,您可以使用
while而不是for,在提供的链接中执行相同的操作。 -
"只有一个迭代器" 为什么?我的意思是,您可以创建一个自定义迭代器类,该类包含两个迭代器并将工作委托给它们,但这看起来工作量很大,但收效甚微。为什么不只使用两个迭代器?
-
@n.1.8e9-where's-my-sharem。我不介意使用 2 个迭代器,但是如何使用我的 for 循环来做到这一点?我应该只在
for( iter =A.begin(); iter! = A.end(); iter++)中使用 iter 并在循环主体中使用iter2++更新iter2吗?我对最佳实践感兴趣。 -
afaik 标准库中没有任何东西可以开箱即用,但有例如
boost::zip_iterator -
@rawrex 我没有具体的理由。我对 C++ 相当陌生,但我认为应该出于这种原因使用迭代器而不是使用下标循环(我假设您的意思是在 A[i] 中使用 i 作为下标?)