gpt4 book ai didi

c++ - 将 vector 中的元素放入队列,然后清除 vector

转载 作者:搜寻专家 更新时间:2023-10-31 01:42:33 24 4
gpt4 key购买 nike

我正在寻找最简单的方法(算法?)将整个 vector 插入队列,然后删除该 vector 。我认为有几种方法可以做到这一点,但我不确定哪种方法最好,或者它们是否都是正确的。选项 1 是使用 vector.pop_back(),但在这种情况下我必须通过 for 循环倒退,这不是问题,因为顺序对象从 vector 进入队列并不重要

for(unsigned i = vector.size() - 1; i >= 0; i--){
queue.push(vector[i]);
vector.pop_back();
}

选项 2 是使用 vector.erase()。 i < vector.size() 也可以吗?因为当我在网上查找迭代 vector 时,我发现很多 i != vector.size() 而不是

for(unsigned i = 0; i < vector.size(); i++){
queue.push(vector[i]);
vector.erase[i];
}

我的问题是,如果我删除 vector[i],vector [i+1] 现在会变成 vector[i] 吗?还是 vector[i] 变成了 Null 值?

我的第三个选择是在最后将其全部删除

for(unsigned i = 0; i < vector.size(); i++){
queue.push(vector[i]);
}
vector.erase(vector.begin(), vector.end());

为了清楚起见,我不想去掉vector变量本身,只是把它放入队列后清空它,因为它最终会存储一堆新的东西一次又一次地转储到队列中。

最佳答案

如果您不介意对象同时出现在队列和 vector 中一段时间​​,只需做最简单的事情:您的第三个选项,只需使用 clear() 代替明确你在做什么:

for(size_t i = 0; i < vector.size(); i++){
queue.push(vector[i]);
}
vector.clear();

当然,在 C++11 中,您可以使用基于范围的 for 循环,甚至可以将项目移出 vector 以避免不必要的复制:

for (auto &elem : vector) {
queue.push(std::move(elem));
}
vector.clear();

关于c++ - 将 vector 中的元素放入队列,然后清除 vector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26681774/

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