从第n个元素开始迭代向量

乔尔·西(Joel Seah)

我正在尝试从第n个元素开始迭代向量不知道我该怎么做。

我有一个矢量我的向量A具有PC1-PC10的10个元素,我的向量B具有User1-User20的20个元素
所以我想做的是,当我的向量A向量B都到达第10个元素时,也就是说向量A的最后一个元素,我想重复迭代向量A,但是从第11个元素开始迭代向量B这样我就可以用它做一些事情。

以下是我想出的简化代码,但从技术上讲,它是关于同一件事的:

vector<string>::iterator b = vecB.begin();
for (int i = 1; i < 2; i++) {
    for (vector<string>::iterator a = vecA.begin(); a != vecA.end() ; a++) {
        if (a == vecA.end()) {
            b = vecB.begin() + 10; //here the iterator for verB should start from the 11th element
        }
    ++b
    }
}

我应该弄乱向量B的迭代器吗?还是有另一种选择?

编辑
看来,我毕竟一直在问一个错误的问题。我已标记了该问题的答案,并将在不久后发布另一个问题。感谢您对我的问题的快速回复!

谢尔盖(Sergey Kalinichenko)

if嵌套循环内的条件将永远是真实的,因为它与循环条件冲突:

for (vector<string>::iterator a = vecA.begin(); a != vecA.end() ; a++) {
// This check ----------------------------------^^^^^^^^^^^^^^^
// guarantees that this will never succeed:
//      vvvvvvvvvvvvvvv
    if (a == vecA.end()) {
        ...
    }
}

您应该这样重写代码:

vector<string>::iterator b = vecB.begin();
// Check that vecB has sufficient number of elements before entering the loop.
for (int i = 1 ; i < 2 ; i++) {
    for (vector<string>::iterator a = vecA.begin(); a != vecA.end() ; ++a, ++b) {
        ...
    }
    // At this point we know for sure that a == vecA.end(),
    // because it is a post-condition of the for loop above.
    b = std::next(vecB.begin(), 11);
}

的调用++b可以移动到循环头中。

注意:的使用,std::next尽管

b = vecB.begin() + 10;

编译向量时,并不能保证适用于所有类型的容器。使用std::next来代替:

b = std::next(vecB.begin(), 11);

注意:此代码假设一个vecB元素至少比元素多11个vecA如果您在进入循环之前检查了该假设,则可能会好的。如果这个假设不成立,则代码将具有未定义的行为。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Clojure循环通过从第n个元素开始的向量而不是0

嵌套向量迭代器-仅显示第n个向量

提取向量的第n个元素

迭代器中的第n个元素

向量化获取每个第n个元素(但第n个元素是可变的)

如何从第n个元素开始传递列表

CSS:选择所有从第n个元素开始

从最大值开始获取列表的第n个元素

如何选择具有最大第 n 个元素的向量

在R中向量的第n个元素之后加上值

获取向量元素的第 n 个最小值

在 Simulink 中动态获取向量的第 n 个元素

在向量组合上减去第 n 个元素

如何跳过Rust迭代器中的第N个元素?

在第N次迭代时修改数组中的第N + 1个元素?

如何到达向量的第N个元素,其中内部向量可能具有不同的长度?

将第 N 个元素推入元素 K-1 的向量后,对象指针向量的元素 K 变为空

如何获得R中两个向量之间的元素的第n个匹配项?

矩阵的第i行乘以向量的第i个元素

如何将向量的第 i 个元素粘贴到向量列表的第 i 个元素

获取整个列的data.frame列内的向量的第n个元素-R

如何在C ++中旋转向量中的第N个元素

在输入向量的笛卡尔积中创建第n个元素的元组

reactjs迭代数组并在每个第n个元素放置包装器div

停在第n个元素?

Grep 第 n 个元素

列表的第n个元素

CSS nth-child:从第4个元素开始的每个第3个元素

如何获取列表中每个项目的第n个元素,该元素本身是未知长度的向量