stl vector erase

C++ Code


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
 
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <vector>
#include <iostream>
using namespace std;

/*
  iterator erase (const_iterator position);
  iterator erase (const_iterator first, const_iterator last);
 */

void print(const vector<int> &v)
{
    vector<int>::const_iterator iter = v.begin();
    for(; iter != v.end(); ++iter)
        cout << *iter << " ";
    cout << endl;
}

void test_case()
{
    vector<int> v;
    for(int i = 1; i <= 10; i++)
        v.push_back(i);
    print(v);

// erase 3 and 5
    vector<int>::iterator iter;
    for(iter = v.begin(); iter != v.end();)
    {
        if(*iter == 3 || *iter == 5)
        {
            iter = v.erase(iter);
        }
        else
        {
            iter++;
        }
    }
    print(v);

// erase 10
    for(iter = v.begin(); iter != v.end();)
    {
        if(*iter == 10)
        {
            iter = v.erase(iter);
        }
        else
        {
            iter++;
        }
    }
    print(v);

// erase from [first,last)
    iter = v.erase(v.begin(), v.begin() + 2);
    print(v);
    cout << *iter << endl;
}

int main()
{
    test_case();
    return 0;
}
/*
1 2 3 4 5 6 7 8 9 10
1 2 4 6 7 8 9 10
1 2 4 6 7 8 9
4 6 7 8 9
4
*/

时间: 2024-07-30 17:28:21

stl vector erase的相关文章

Stl——Vector.erase()用法

今天用上了Vector.erase()方法,发现很多鬼畜.后来查资料才发现,erase()是删除当前迭代器返回下一个迭代器.如果你仅仅是使用了erase但是没有更新遍历的迭代器就会导致当前迭代器被释放成野指针,成为野指针后再使用++ -- 的操作肯定会出问题.于是你需要将迭代器更新,即iter = myVec.erase():更新之后,iter已经指向了删除元素的下一位.此时跳出判断,又回到了for循环,for循环中iter又++了一次,这样就使得后面一个元素被跳过了.所以,在使用iter =

STL vector用法介绍

介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用.通过阅读这篇文章读者应该能够有效地使用vector容器,而且应该不会再去使用C类型的动态数组了.   Vector总览 vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象

C++ stl vector介绍

转自: STL vector用法介绍 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用.通过阅读这篇文章读者应该能够有效地使用vector容器,而且应该不会再去使用C类型的动态数组了.   Vector总览 vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是

STL vector

author:Donald-hu    theme:STL vector 介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用.通过阅读这篇文章读者应该能够有效地使用vector容器,而且应该不会再去使用C类型的动态数组了.   Vector总览 vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.v

STL中erase的小心使用

先看如下一道改错题: #include<iostream> #include<vector> using namespace std; void print(vector<int>); int main() { vector<int> array; array.push_back(1); array.push_back(6); array.push_back(6); array.push_back(3); //删除array数组中所有的6 vector<

STL vector使用方法介绍

介绍 这篇文章的目的是为了介绍std::vector,怎样恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用.通过阅读这篇文章读者应该可以有效地使用vector容器,并且应该不会再去使用C类型的动态数组了.   Vector总览 vector是C++标准模板库中的部分内容,它是一个多功能的,可以操作多种数据结构和算法的模板类和函数库.vector之所以被觉得是一个容器,是由于它可以像容器一样存放各种类型的对象

STL vector用法介绍(转)

介绍 这篇文章的目的是为了介绍std::vector,如何恰当地使用它们的成员函数等操作.本文中还讨论了条件函数和函数指针在迭代算法中使用,如在remove_if()和for_each()中的使用.通过阅读这篇文章读者应该能够有效地使用vector容器,而且应该不会再去使用C类型的动态数组了.   Vector总览 vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象

map, set, vector erase的正确使用方法

map, set, vector erase的正确使用方法 在C++中, 如果我们使用STL,那 如何使用 erase() 来删除 map, set, vector 的所有数据?下面将给出正确的使用方法. STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector .deque); 另一类是以不连续的节点形式存储的容器(如:list.set.map).在使用erase方法来删除元素时,需要注意一些问题,以避免引起不可预知错误或崩溃. 在使用 list.set 或 map遍历

利用内存chunk充当数据buffer的vector的实现,和STL vector 有接口操作性能比较

问题描述: 1.vector是最常用到的容器,它其实是一种自动扩充的动态数组,底层实现通过两倍扩展, 所以再不能预知要存入元素多少时,难免要两倍扩展,这带来了拷贝所存对象的开销: 2.本文尝试利用memory chunk作为底层存储容器来避免动态扩展时copy 开销: 3.本实现屏蔽了STL  vector 一些接口比如erase,主要是为了减轻实现复杂性考虑: 4.它支持两边插入和删除操作,其接口功能完全等同于STL 的deque: 5.和STL vector 做了push_back, pop