您的位置:首页 > 其它

容器vector和迭代器iterator的学习使用

2012-12-22 22:01 309 查看
vector、algorithm、deque、functional、iterrator、list、map、memory、numeric、queue、set、stack、utility
vector的声明:
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 ;}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐