gpt4 book ai didi

c++ - 循环遍历 C++ vector

转载 作者:太空宇宙 更新时间:2023-11-04 11:41:25 27 4
gpt4 key购买 nike

我有一个任务要遍历一个 vector 并每隔三个数字删除一次。如果它到达 vector 的末尾,它应该从第一个条目开始再次计数,直到只剩下一个数字。用户输入 vector 中应包含多少个数字。

我很难适应 vector 和数组之间的区别 - 就在上周,我们遇到了一个涉及环绕数组的问题,该问题已通过 mod 解决,但我很快发现这不适用于 vector .

到目前为止,我的想法是:迭代并删除每三个条目,直到 vector 的大小为 1。

 while (vector.size > 1) {
for(std::vector<int>::iterator i = suitors.begin(); i <= suitors.end(); i++) {
// here, add a case for if it hits the end, start over
if (i = suitors.end()) {
i = suitors.begin();
}
suitors.erase(suitors.at(i) + 2);
}

我遇到的问题是弄清楚如何让它重新开始,因为当我尝试以这种方式使用 i 时出现错误。

有什么建议或技巧可以让我走上正确的道路吗?我开始看到载体是多么的多才多艺,但它们只是还没有点击。我也不确定除了 while 循环之外是否有更好的方法来阻止它迭代。

最佳答案

每当每次递增的索引变量达到 3 时,我都会使用 remove_if 将 vector 中的项目移动到末尾。

#include <iostream>
#include <vector>
#include <algorithm>

int main()
{
std::vector<int> v{1,2,3,4,5,6};

unsigned index = 0; // this is the index variable used to remove elements
auto end = v.end(); // point to the current end of the vector

// keep looping until there is only 1 element in the vector
while(std::distance(v.begin(), end) > 1) {
// remove_if will call the predicate for each element
// the predicate simply increments the index each time, and when it reaches
// 3 indicates that element should be removed
// remove_if will move items to the end of the vector and return an
// iterator to the end of the new range, so we'll update the end variable
// with the result
end = std::remove_if(v.begin(), end, [&index](int) {
if(++index == 3) {
// reset the index and indicate this element should be removed
return (index = 0), true;
}
return false;
});

for(auto iter = v.begin(); iter != end; ++iter) {
std::cout << *iter << ' ';
}
std::cout << '\n';
}

// erase all the elements we've removed so far
v.erase(end, v.end());
}

输出:

1 2 4 5 
1 2 5
1 5
1

Live demo

关于c++ - 循环遍历 C++ vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21249287/

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