gpt4 book ai didi

c++ - 从第 n 个元素开始迭代 vector

转载 作者:行者123 更新时间:2023-11-30 03:56:34 25 4
gpt4 key购买 nike

我正在尝试从 nth 元素开始迭代一个 vector 。不确定我应该怎么做。

我有一个 vector AB。我的 vector APC1-PC10 的 10 个元素,我的 vector BUser1-User20 的 20 个元素。
所以我想做的是当我的 vector AB 都到达第 10 个元素时,意思是说 vector A 的最后一个元素,我想重复迭代 vector A 但从 11th 元素开始迭代 vector 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
}
}

我应该弄乱 vector B 的迭代器吗?或者有其他选择吗?

编辑
看来我终究是问错了问题。我已经标记了这个问题的答案,很快就会发布另一个。感谢您对我的问题的快速回复!

最佳答案

嵌套循环中的 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;

为 vector 编译,不保证对所有类型的容器都适用。使用 std::next相反:

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

注意:此代码假设 vecB 至少比 vecA 多 11 个元素。如果您在进入循环之前检查该假设,这可能没问题。如果这个假设被打破,代码将有未定义的行为。

关于c++ - 从第 n 个元素开始迭代 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28435405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com