📅  最后修改于: 2023-12-03 15:23:58.449000             🧑  作者: Mango
在C++中,向量是一种非常有用的数据结构,在许多情况下被用来代替数组。一个向量是由一些元素组成的序列,它们可以按照添加的顺序存储,非常类似于数组。在本篇文章中,我们将讨论如何使用Erase()和reverse_iterator从向量中擦除元素。
在C++中,向量是由一些元素组成的连续序列,这些元素可以用push_back()或者insert()方法添加到末尾或者指定位置。向量中的元素可以通过下标或者迭代器来访问。要声明一个向量变量,我们可以使用以下语法:
std::vector<int> myVector;
这将声明一个空的向量,它可以存放int类型的元素。也可以使用以下语法声明向量:
std::vector<int> myVector(10); // 其中10是向量的大小
这将声明一个大小为10的向量,其中所有元素都是0。如果需要的话,我们可以使用resize()方法更改向量的大小。
Erase()方法用于删除向量中的一个或多个元素。它需要一个迭代器作为参数,该迭代器指向要删除的第一个元素。有以下两个版本的Erase()方法:
iterator erase( const_iterator pos ); // 删除一个元素
iterator erase( const_iterator first, const_iterator last ); // 删除一段元素
如果我们要删除一个元素,可以使用以下代码:
myVector.erase(myVector.begin() + 3); // 删除第四个元素
如果要删除一段元素,可以使用以下代码:
myVector.erase(myVector.begin() + 3, myVector.begin() + 6); // 删除第4、第5、第6个元素
reverse_iterator是一个反向迭代器,它可以从向量的末尾开始遍历元素。如果我们想从向量的末尾开始删除元素,可以使用rbegin()函数和erase()函数的reverse_iterator版本。以下是删除最后一个元素的示例代码:
myVector.erase(myVector.rbegin().base() + 1); // 删除最后一个元素
在这里,rbegin()返回反向迭代器,例如指向最后一个元素。然后,我们调用base()方法来从反向迭代器中获取正向迭代器,最后减去1来获得指向倒数第二个元素。此操作将删除最后一个元素。
#include <iostream>
#include <vector>
int main()
{
std::vector<int> myVector = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
// 遍历向量并擦除所有的偶数
for (auto it = myVector.begin(); it != myVector.end();)
{
if (*it % 2 == 0)
{
it = myVector.erase(it);
}
else
{
++it;
}
}
for (auto i : myVector)
{
std::cout << i << " ";
}
std::cout << std::endl;
// 按照逆序遍历向量并擦除前三个元素
for (auto it = myVector.rbegin(); it != myVector.rbegin() + 3; ++it)
{
myVector.erase((it + 1).base()); // 注意此处的+1操作
}
for (auto i : myVector)
{
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}
以上代码将输出:
1 3 5 7 9
7 9
Erase()方法和reverse_iterator是在向量中擦除元素非常有用的工具。要保证程序正确性,我们需要清楚迭代器的操作,以及如何使用迭代器来遍历向量并删除其中的元素。为了避免不必要的复杂性,我们可以通过以下简单的策略来保证向量的正确性: