我有一个向量。我需要删除其中的最后 3 个元素。描述了这个逻辑。程序崩溃。可能是什么错误?
vector<float>::iterator d = X.end();
for (size_t i = 1; i < 3; i++) {
if (i == 1) X.erase(d);
else X.erase(d - i);
}
Run Code Online (Sandbox Code Playgroud)
Pau*_*zie 11
如果向量中至少有 3 个项目,删除最后 3 个项目很简单——只需调用pop_back 3 次:
#include <vector>
#include <iostream>
int main()
{
std::vector<float> v = { 1, 2, 3, 4, 5 };
for (int i = 0; i < 3 && !v.empty(); ++i)
v.pop_back();
for ( const auto &item : v ) std::cout << item << ' ';
std::cout << '\n';
}
Run Code Online (Sandbox Code Playgroud)
输出:
1 2
Run Code Online (Sandbox Code Playgroud)
Rem*_*eau 11
将迭代器传递给 1 参数重载是未定义的行为。即使不是,也会使指定元素“位于和之后”的迭代器无效,在第一次循环迭代后使其无效。end()erase()erase()d
std::vector有一个 2 参数erase()重载,它接受一系列要删除的元素。您根本不需要手动循环:
if (X.size() >= 3)
X.erase(X.end()-3, X.end());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
282 次 |
| 最近记录: |