STL-- vector

1. 头文件

#include<vector>

2. 数组习惯用法

vector<int> iVec(10);//定义10个整数
iVec[0] = 10;//第一个元素赋值为10
vector<int> iVec(10, -1);// 定义10个整数,每个整数被初始化为-1

int ia[ 6 ] = { -2, -1, 0, 1, 2, 1024 };
vector< int > iVec( ia, ia+6 );//把 ia 的 6 个元素拷贝到 ivec 中

vector< int > ivec( &ia[ 2 ], &ia[ 5 ] );// 拷贝 3 个元素 ia[2], ia[3], ia[4] 

3. STL 习惯用法

  1) 在尾部插入元素,push_back

string word;
while (cin>>word)
{
  text.push_back(word);  
  ...
}

  虽然还可以按照如下方式进行访问,

cout << "words read are: \n"; 
for ( int ix = 0; ix < text.size(); ++ix ) 
      cout << text[ix] << ' ';

  但是,经典方式是使用vector操作集中的begin()以及end()所返回的迭代器iterator,

cout<<"words read are:\n";
for (vector<string>::iterator it = text.begin(); it != text.end(); ++ it) {
    cout<<*it<<" ";  
}
cout<<endl;

  其中,iterator是标准库中的类,它具有指针的功能,而*it是对迭代器解引用,并访问其指向的实际对象,++it是向前移动,使得it指向下一个元素

  2) 不能混用这两种习惯用法,比

vector<int> ivec; 
ivec[0] = 1024; //错误的 ,因为 ivec 还没有第一个元素,我们只能索引 vector 中已经存在的元素 size()操作返回 vector 包含的元素的个数

  3) 类似地,当我们给定大小指定一个vector时,定义如下

vector<int> ia( 10 );

4. vector常用操作

#include<vector> // 头文件

vector<int> vec;//创建vector对象

vec.push_back(a); //尾部插入数字

cout<<vec[0]<<endl; //使用下标访问元素,0开始

vector<int>::iterator it; //使用迭代器访问元素
for (it = vec.begin(); it != vec.end(); it ++)
    cout<<*it<<endl;

vec.insert(vec.begin()+i,a); //在第i + 1个元素前面插入a

vec.erase(vec.begin()+2); //删除第3个元素
vec.erase(vec.begin()+i,vec.end()+j);//删除区间[i,j-1];区间从0开始

vec.size();// 向量大小

vec.clear(); // 清空

需要头文件,#include<algorithm>
reverse(vec.begin(),vec.end());//将元素翻转(在vector中,如果一个函数中需要两个迭代器,一般后一个都不包含.) sort(vec.begin(),vec.end());//(默认是按升序排列,即从小到大).可以通过重写排序比较函数按照降序比较

 

posted @ 2015-04-14 18:03  yiyi_xuechen  Views(137)  Comments(0Edit  收藏  举报