删除std::vector成员
时间: 2023-07-20 14:28:43 浏览: 107
要删除std::vector中的成员,可以使用std::vector的erase()函数。erase()函数可以根据指定的位置或者范围删除vector中的元素。例如,如果要删除vector中的第3个元素,可以使用以下代码:
```
std::vector<int> vec = {1, 2, 3, 4, 5};
vec.erase(vec.begin() + 2); // 删除第3个元素
```
如果要删除一定范围内的元素,可以使用以下代码:
```
std::vector<int> vec = {1, 2, 3, 4, 5};
vec.erase(vec.begin() + 1, vec.begin() + 3); // 删除第2个到第4个元素
```
需要注意的是,erase()函数会使vector中后面的元素向前移动,因此在使用erase()函数后,迭代器的指向可能会发生改变。
相关问题
遍历删除删除std::vector成员
在遍历std::vector时,如果想要删除其中的元素,可以使用std::vector的erase()函数。但是需要注意的是,使用erase()函数删除元素时,会使迭代器失效,因此需要使用正确的方法来遍历std::vector并删除其中的元素。
一种方法是使用while循环遍历,以及使用迭代器来删除元素。具体实现如下:
```
std::vector<int> vec = {1, 2, 3, 4, 5};
auto it = vec.begin();
while (it != vec.end()) {
if (*it == 3) {
it = vec.erase(it); // 删除元素并返回下一个元素的迭代器
} else {
++it; // 迭代器指向下一个元素
}
}
```
另一种方法是使用for循环倒序遍历std::vector,以及使用迭代器来删除元素。具体实现如下:
```
std::vector<int> vec = {1, 2, 3, 4, 5};
for (auto it = vec.rbegin(); it != vec.rend(); ++it) {
if (*it == 3) {
vec.erase(std::next(it).base()); // 删除元素
}
}
```
这里使用了std::reverse_iterator来倒序遍历std::vector,std::next()函数返回的是迭代器的下一个元素的迭代器,std::next(it).base()返回的是迭代器的底层迭代器,即可用于erase()函数。
std::arrayhe vector
std::array和vector是C++中用于存储多个元素的容器类。它们有一些共同点,但也有一些区别。
1. 相似之处:
- 都可以用来存储多个元素。
- 都提供了成员函数来访问和修改容器中的元素。
- 都支持动态大小调整。
- 都支持迭代器,可以通过迭代器遍历容器中的元素。
2. 不同之处:
- std::array是固定大小的数组,其大小在编译时确定,并且不能动态调整。而vector是动态数组,可以在运行时动态增长或缩小。
- std::array的大小是固定的,因此它的内存是在栈上分配的。而vector的大小可以在运行时改变,因此它的内存是在堆上分配的。
- std::array的大小是在编译时确定的,因此它的元素数量必须是常量表达式。而vector的大小可以是变量,可以根据需要进行调整。
- std::array没有提供插入或删除元素的成员函数,因为其大小是固定的。而vector提供了插入、删除等操作,因为它支持动态大小调整。
总之,如果你需要一个固定大小且不需要动态调整的数组,可以使用std::array。如果你需要一个可以动态调整大小的数组,并且需要在运行时插入、删除元素,可以使用vector。
阅读全文