2.2.3 删除数据STL
的容器都有 erase
方法,用来删除指定位置或区间的数据 。也提供有clear
方法,用来清除整个容器 。
位置和区间都需使用迭代器指定 。
// 初始化向量vector<int> vec{1, 2, 3, 4, 5, 6};//指向容器vec的第三个元素vector<int>::iterator iter = vec.begin() + 2;// 删除第三个元素vec.erase(iter);//指向容器vec的第三个元素iter = vec.begin() + 2;// 删除第二个元素之后的所有元素vec.erase(iter, vec.end() );// 构造一个集合set<int> intSet( ary1, ary1+5 );// 删除键值为4的元素(集合的键值与实值是一致的)intSet.erase( 4 );
2.2.4 查找数据序列式容器没有提供查找方法,但是,如果某容器类重载了[]
运算符,则可以通过给定数据的索引号找到相应数据,也可以通过 at
方式进行查找 。// 初始化向量vector<int> vec{1, 2, 3, 4, 5, 6};int tmp= vec[2];cout<<tmp<<endl;//效果上面一样tmp= vec.at(2);cout<<tmp<<endl;
序列式容器一般都会提供front
和back
方法,用来返回第一个和最后一个数据 。因为栈的特殊性,只有top
方法用来返回栈顶数据 。vector<int> vec {1, 2, 3, 4, 5, 6};list<int> intList( vec.begin(), vec.end() );//返回第一个数据x = intList.front();//返回最后一个数据x = intList.back();stack<int,vector<int> > st;//返回栈顶数据x = st.top();
关联式容器提供有专门的find
方法,可通过指定键值进行查找,注意,返回的是用迭代器所描述的位置 。// 整数型数组int ary[5] = { 3, 1, 5, 2, 4};// 构造集合set<int> intSet( ary, ary+5 );// 查找集合中键值为4的元素set<int>::iterator iter = intSet.find( 4 );//输出cout<<*iter<<endl;
基于组件的分工合作设计思想,容器自身的查找只会提供一些基本功能 。当有更复杂的查找需求时,可以使用STL
算法中相应的函数模板进行查询,例如find
,find_if
,find_end
和find_first_of
。2.2.5 修改数据可以先查找到要修改的数据,然后直接修改,如果查找数据时返回的是迭代器,则可以通过迭代器进行修改 。
// 构造向量vector<int> vec{ 3, 1, 5, 2, 4};//直接修改vec[3] =9;//[] 反回的是向量数据的引用int &refTmp=vec[3];//和前面的直接修改一样refTmp=9;map<int,int>myMap();//按键值查找,返回迭代器map<int,int>::iterator iter=myMap.find(10);//通过迭代器修改iter->second=8;//和上面的效果一样myMap[10]=8;
2.2.6 其它方法begin
: 返回容器开始位置的迭代器 。end
:返回容器尾部数据后一个存储位置的迭代器 。rbegin
:求指向容器反向开始元素的迭代器 。rend
:求容器反向结尾元素后一个存储单元的迭代器 。swap
:交换两个容器的内容 。swap
方法用来交换两个容器的内容 。要求两个容器的类型、大小相同 。
//构造两个向量vector<int> v1 {1, 2, 3};vector<int> v2 {4, 5, 6};//交换两个向量v1.swap(v2);vector<int>::iterator iter = v2.begin();//输出向量v2的内容for(; iter != v2.end(); iter++) {cout<<*iter<<endl;}
==、!=、<、<=、>、>=
:比较运算符,判断两个容器之间的关系 。比较返回结果是第一对不相等数据间的比较结果 。如果两个容器的数据数目不相等,则容器不相等 。
// 定义两个向量vector <int> v1, v2;// 在v1中加入数据v1.push_back( 1 );v1.push_back( 2 );v1.push_back( 3 );// 在v2中加入数据v2.push_back( 1 );v2.push_back( 3 );//返回结果是 V1 第一个数据与 V2 中第一个数据的比较结果bool res=v1 < v2;// 输出1,true 如果 v1 的第一个数据是 4 则,输出 0cout<< "v1 < v2:" <<res<<endl;
经验总结扩展阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 【C++】从零开始的CS:GO逆向分析2——配置GLFW+IMGUI环境并创建透明窗口
- C++自学笔记 Composition:对象组合
- 会计核算概述是什么?
- 查账的概述是什么?
- 为什么网上买不到EffectiveSTL这本书呢
- 计算机语言有哪些
- 车内阅读灯是什么
- 奔驰R级是什么
- 蓝旗亚Thesis是什么
- 赛纳是什么