如何清除向量中的所有元素,除了C++中向量中的最后一个元素

Posted

技术标签:

【中文标题】如何清除向量中的所有元素,除了C++中向量中的最后一个元素【英文标题】:How to clear all elements in a vector except for the last one in a vector in c++ 【发布时间】:2021-09-06 14:49:43 【问题描述】:

正如标题所说,我有一个包含 11 个整数元素的向量,范围从 1 到 11。我正在尝试使用 .erase() 函数清除向量中除最后一个之外的所有元素。我无法使用迭代器来执行此操作,因为它们清除了除第一个元素之外的所有元素。我尝试了很多来自互联网的解决方案,例如使用 .rbegin() 和 .rend() 但他们只是给了我一个错误。

下面是我的代码:-

#include <vector>
#include <iostream>

using namespace std;

vector<int> epos = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11;
vector<int>::iterator it1, it2;

int main() 

    it1 = epos.begin();
    it2 = epos.end();

    epos.erase(it1, it2);
    for (int i=0; i<=epos.size(); i++) 
        cout << epos[i] << ' ';
    
    return 0;

我仍然是 C++ 的初学者,如果有任何帮助,我将不胜感激!

【问题讨论】:

【参考方案1】:

你快到了,使用这个语法:

 // make sure we end up with a vector with one element in it.
 // empty lists will stay empty
 if(epos.size()>1) 
 
     epos.erase(epos.begin(), epos.end() - 1);
 

你知道你也可以像这样迭代容器吗?

for (auto v : epos)

    cout << v << ' ';

它被称为基于范围的 for 循环,可以防止您在使用索引时出错

【讨论】:

以上是关于如何清除向量中的所有元素,除了C++中向量中的最后一个元素的主要内容,如果未能解决你的问题,请参考以下文章

如何检查向量的所有元素是不是在 Eigen c++ 中的另一个向量中?

c++中向量中的元素除法

如何找到向量中的最大元素(C++)?

如何将唯一指针向量中的每个元素排入队列? (C++)

双向链表模板向量中的输入排序(C++)

是否可以在 C++ 中更改向量的开始位置以清除其前 n 个元素?