容器vector和迭代器iterator的学习使用
2012-12-22 22:01
309 查看
vector、algorithm、deque、functional、iterrator、list、map、memory、numeric、queue、set、stack、utilityvector的声明:
vector<type> vec;
size();resize();at();front();back();begin();end();rbegin();rend();empty();assign();swap();clear();erase();insert()
vector&oprator=(const vector& vec);
迭代器的声明 :
vector<type>::iterator it; vector<type>::const_iterator it; vector<type>::reverse_iterator it; vector<type>::const_reverse_iterator it;存取元素的方法
vec[i]- 存取索引值i 的元素。第一vec[0]
vec.at(i)- 存取索引值 i 的元素的參照,以 at() 存取會做陣列邊界檢查,如果存取越界將會拋出一個例外,這是與operator[]的唯一差異。
vec.front()- 回傳 vector 第一個元素的參照。
vec.back()- 回傳 vector 最尾元素的參照。新增或移除元素的方法
vec.push_back()- 新增元素至 vector 的尾端,必要時會進行記憶體配置。
vec.pop_back()- 刪除 vector 最尾端的元素。
vec.insert()- 插入一個或多個元素至 vector 內的任意位置。
vec.erase()- 刪除 vector 中一個或多個元素。
vec.clear()- 清空所有元素。取得長度/容量
vec.size()- 取得 vector 目前持有的元素個數。
vec.empty()- 如果 vector 內部為空,則傳回 true 值。
vec.capacity()- 取得 vector 目前可容納的最大元素個數。這個方法與記憶體的配置有關,它通常只會增加,不會因為元素被刪減而隨之減少。重新配置/重設長度
vec.reserve()- 如有必要,可改變 vector 的容量大小(配置更多的記憶體)。在眾多的 STL 實做,容量只能增加,不可以減少。
vec.resize()- 改變 vector 目前持有的元素個數。迭代 (Iterator)
vec.begin()- 回傳一個Iterator,它指向 vector 第一個元素。
vec.end()- 回傳一個Iterator,它指向 vector 最尾端元素的下一個位置(請注意:它不是最末元素)。
vec.rbegin()- 回傳一個反向Iterator,它指向 vector 最尾端元素的。
vec.rend()- 回傳一個Iterator,它指向 vector 的第一個元素。简单应用:
#include <iostream> #include<vector> using namespace std; int main() { vector<int> v; cout<<"在后面插入元素 "<<endl;; for(int i=0;i<10;i++){ v.push_back(i); }
cout<<"删除最后一个元素 "<<endl;; v.pop_back(); v.pop_back(); cout<<"打印 "<<endl;;
for(size_t i=0;i<v.size();i++){ cout<<"第"<<i<<"个元素"<<":"<<v[i]<<endl; } cout<<"使用front()、at()、back() "<<endl; cout<<v.front() //front()、back()、back()也能充当可修改的左值 <<"-"<<v.at(4) <<"-"<<v.back()<<endl; cout<<"判断不为空、插入元素"<<endl;; for(int i=0;i<10;i++){ if(!v.empty()) v.push_back(++i); } cout<<"打印vector数组元素"<<endl;; for(size_t i=0;i<v.size();i++){ cout<<"第"<<i<<"个元素"<<":"<<v[i]<<endl; } return 0 ; }
比较全面的应用:
#include <iostream>#include<vector>#include <cstdlib>using namespace std;int main(){vector<int> v1;vector<int>::iterator it;for(int i=0;i<10;i++){v1.push_back(i);}cout<<"正向输出:"<<endl;for(it=v1.begin();it!=v1.end();it++){cout<<*it<<" ";}cout<<endl;cout<<"反向输出:"<<endl;vector<int>::reverse_iterator rit;for(rit=v1.rbegin();rit!=v1.rend();rit++){cout<<*rit<<" ";}cout<<endl<<"--------------------------------------"<<endl<<"v2:"<<endl;int arr[]={0,1,2,3,4,5,6,7,8,9};vector<int> v2(arr,arr+10); //将arr数组复制到容器v2中去vector<int>::iterator it2;for(it2=v2.begin();it2!=v2.end();it2++){cout<<*it2<<" ";}cout<<endl<<"v3:"<<endl;vector<int> v3(v2.begin(),v2.end());//利用构造函数初始化容器v3vector<int>::iterator it3;for(it3=v3.begin();it3!=v3.end();it3++){cout<<*it3<<" ";}cout<<endl<<"v4:"<<endl;//erase和insert对于const iterater和const reverse_itetater并不支持vector<int> v4(10,10);vector<int>::iterator it4;for(it4=v4.begin();it4!=v4.end();it4++){cout<<*it4<<" ";}//resize()的使用cout<<endl<<"v1大小:"<<v1.size()<<endl<<"v2大小:"<<v2.size()<<endl<<"v3大小:"<<v3.size()<<endl<<"v4大小:"<<v4.size()<<endl;v3.resize(10,0);cout<<"resize()为10后v3的大小:"<<v3.size()<<endl;for(int i=0;i<(int)v3.size();i++){cout<<v3[i]<<" ";}v3.resize(5);cout<<endl<<"resize()为5后v3的大小:"<<v3.size()<<endl;for(int i=0;i<(int)v3.size();i++){cout<<v3[i]<<" ";}//擦除的使用v1.clear();cout<<endl<<"v1全擦除后的大小:"<< v1.size()<<endl;cout<<"插入操作insert()";vector<int>::iterator itx;itx=v1.begin();cout<<endl<<"在位置1插入88"<<endl;;v1.insert(itx,88);//在开始的位置插入111,for(int i=0;i<(int)v1.size();i++){cout<<v1[i]<<" ";}cout<<endl;v1.insert(itx,10,5);//从位置0开始连续插入10个5;for(int i=0;i<(int)v1.size();i++){cout<<v1[i]<<" ";}cout<<endl<<"擦除位置5到位置10的元素"<<endl;v1.erase(itx+5,itx+10); //擦除位置5到位置10的元素、for(int i =0;i<(int)v1.size();i++){cout<<v1[i]<<" ";}v1.clear();cout<<endl<<"全擦除后v1大小"<<v1.size()<<endl;vector<int> vec;vec.swap(v2);vec.reserve(1000);cout<<vec.size()<<endl;return 0 ;}
相关文章推荐
- 【C++】vector容器和list容器中使用单个迭代器的erase函数学习笔记
- 用vector向量容器装入10个整数,使用迭代器iterator和accumulate算法统计这10个元素的和
- map等关联容器 vector等序列容器 如何防止迭代器失效 即erase()的使用
- 标准库容器 vector 和 迭代器 iterator 的简单介绍
- 从零开始学C++之STL(三):迭代器类vector::iterator 和 vector::reverse_iterator 的实现、迭代器类型、常用的容器成员
- c++中iterator迭代器和vector容器
- C++中防止STL中迭代器失效——map/set等关联容器——vector/list/deque等序列容器—如何防止迭代器失效—即erase()的使用
- map等关联容器 vector等序列容器 如何防止迭代器失效 即erase()的使用
- vector erase 重复删除容器内的指定内容时,使用迭代器(iterator)++的操作应该放到For循环内
- map等关联容器 vector等序列容器 如何防止迭代器失效 即erase()的使用
- 学习使用Vector模板以及迭代器Iter…
- 如何使用迭代器iterator循环删除容器中的元素?
- c++ 模板参数做容器参数迭代器报错 vector<T>::const_iterator,typename const报错
- C++学习:迭代器iterator的使用
- C++ Vector 序列容器 之 使用vector和迭代器
- STL学习笔记之 (五)容器 vector deque list 使用条件
- 小记—— vector 删除指定下标中的元素(不使用迭代器(iterator ))
- C++ STL容器的学习使用(vector、queue、list、set、map)
- vector容器的end是指向最后一个元素的下一个位置,使用时要将迭代器减1,才能获取到最后一个
- map等关联容器 vector等序列容器 如何防止迭代器失效 即erase()的使用