STL中的Vector用法示例

来源:互联网 发布:淘宝哪些店卖正品万斯 编辑:程序博客网 时间:2024/05/16 07:09

参考 http://dev.csdn.net/article/48/article/48/article/49/49091.shtm

void CVectorTest::ShowInfo(string name,vector<int> & vIntVector)
{
 //c.max_size() 返回容器中最大数据的数量。
 //c.at(idx) 传回索引idx所指的数据,如果idx越界,抛出out_of_range。
 //c.capacity() 返回容器中数据个数。
 //c.size() 返回容器中实际数据的个数。

 cout<<"** "<<name<<endl;
 cout<<"   Size : "<<vIntVector.size()<<"  Capacity: "<<vIntVector.capacity()<<"  Max Size : "<<vIntVector.max_size()/(1024*1024)<<"M"<<endl;
 
 for(int index = 0;index<vIntVector.size();index++)
 {
  // cout<<" Index: "<<index<<"  Value: "<<vIntVector[index]<<endl;
 }

 //iterator——对于除了vector以外的其他任何容器,你可以通过这种游标在一次操作中在容器中朝向前的方向走一步。这意味着对于这种游标你只能使用“++”操作符。而不能使用“--”或“+=”操作符。而对于vector这一种容器,你可以使用“+=”、“—”、“++”、“-=”中的任何一种操作符和“<”、“<=”、“>”、“>=”、“==”、“!=”等比较运算符。
 //reverse_iterator ——如果你想用向后的方向而不是向前的方向的游标来遍历除vector之外的容器中的元素,你可以使用reverse_iterator 来反转遍历的方向,你还可以用rbegin()来代替begin(),用rend()代替end(),而此时的“++”操作符会朝向后的方向遍历。
 //const_iterator ——一个向前方向的游标,它返回一个常数值。你可以使用这种类型的游标来指向一个只读的值。
 //const_reverse_iterator ——一个朝反方向遍历的游
 //c.begin() 传回迭代器重的可一个数据。
 //c.end() 指向迭代器中的最后一个数据地址。
 //c.rbegin() 传回一个逆向队列的第一个数据。
 //c.rend() 传回一个逆向队列的最后一个数据的下一个位置。标,它返回一个常数值。
 vector<int>::iterator intIterator;
 cout <<"   Iterator: ";
 for (intIterator = vIntVector.begin(); intIterator != vIntVector.end(); intIterator++)
 {
  cout << *intIterator;
  if (intIterator != vIntVector.end()-1)
   cout << " , ";
 }
 cout<<endl;

 vector<int>::reverse_iterator intReIterator;
 cout <<"   Reverse Iterator: ";
 for (intReIterator = vIntVector.rbegin(); intReIterator != vIntVector.rend(); intReIterator++)
 {
  cout << *intReIterator;
  if (intReIterator != vIntVector.rend())
   cout << " , ";
 }
 cout<<endl;

 //c.front() 传回地一个数据。
 //c.back() 传回最后一个数据,不检查这个数据是否存在。
 //c.empty() 判断容器是否为空。
 if(vIntVector.empty())
 {
  cout<<" Empty vector."<<endl;
 }
 else
 {
  cout<<"   First element: "<<vIntVector.front()<<endl;
  cout<<"   Last element: "<<vIntVector.back()<<endl;
 }
 
}

void CVectorTest::Test()
{
 vector<int> Vector0;
 for(int i = 20;i<=28;i++)
 {
  Vector0.push_back(i);
 }
 ShowInfo("Vector0",Vector0);

////////////// vector中的数据赋值
 //vector<Elem> c 创建一个空的vector。
 vector<int> Vector1;
 
 //c.assign(beg,end) 将[beg; end)区间中的数据赋值给c。
 Vector1.assign(Vector0.begin(),Vector0.end());
 ShowInfo("Vector1",Vector1);

 //c.assign(n,elem) 将n个elem的拷贝赋值给c。
 Vector1.assign(3,5);
 ShowInfo("Vector1",Vector1); 
  
/////////////  vector的构造
 //vector <Elem> c1(c2) 复制一个vector。
 vector<int> Vector2(Vector1);
 ShowInfo("Vector2",Vector2);

 //vector <Elem> c(n) 创建一个vector,含有n个数据,数据均已缺省构造产生。
 vector<int> Vector3(6);
 ShowInfo("Vector3",Vector3);

 //vector <Elem> c(n, elem) 创建一个含有n个elem拷贝的vector。
 vector<int> Vector4(4, 8);
 ShowInfo("Vector4",Vector4);

 //vector <Elem> c(beg,end) 创建一个以[beg;end)区间的vector。
  vector<int> Vector5(Vector1.begin()+1,Vector1.end()-1);
 ShowInfo("Vector5",Vector5);


////////////// 交换两个vector中的元素
 //swap(c1,c2) 将c1和c2元素互换。
 //swap(c1,c2)同上操作。
 Vector2.swap(Vector3) ;
 ShowInfo("Vector2",Vector2);
 ShowInfo("Vector3",Vector3);

////////////// 插入数据
 //c.insert(pos,elem) 在pos位置插入一个elem拷贝,传回新数据位置。
 Vector2.insert(Vector2.begin() + 1,3) ;
 ShowInfo("Vector2",Vector2);
 
 //c.insert(pos,n,elem) 在pos位置插入n个elem数据。无返回值。
 Vector2.insert(Vector2.begin() + 1,2,4) ;
 ShowInfo("Vector2",Vector2);
 
 //c.insert(pos,beg,end) 在pos位置插入在[beg,end)区间的数据。无返回值。
 Vector2.insert(Vector2.begin() + 1,Vector3.begin(),Vector3.end()) ;
 ShowInfo("Vector2",Vector2);

///////////////  增删数据
 //c.pop_back() 删除最后一个数据。
 //c.push_back(elem) 在尾部加入一个数据
 for(i = 0;i<=Vector0.size()-1;i++)
 {
  Vector0.pop_back();
 }
 ShowInfo("Vector0",Vector0);
 ShowInfo("Vector1",Vector1);

/////////////  删除数据
 //c.erase(pos) 删除pos位置的数据,传回下一个数据的位置。
 Vector1.erase(Vector1.begin() + 2);
 ShowInfo("Vector1",Vector1);

 //c.erase(beg,end) 删除[beg,end)区间的数据,传回下一个数据的位置。
  Vector1.erase(Vector1.begin() + 1,Vector1.end() - 1);
 ShowInfo("Vector1",Vector1);
 
 //c.clear() 移除容器中所有数据。
 Vector1.clear();
 ShowInfo("Vector1",Vector1);

////////////  利用交换技巧压缩vector
 vector<int>(Vector1).swap(Vector1);
 ShowInfo("Vector1",Vector1);

////////////  改变vector的容积
 //reserve(Container::size_type n)强制容器把它的容量改为至少n,提供的n不小于当前大小。这一般强迫进行一次重新分配,因为容量需要增加。(如果n小于当前容量,vector忽略它,这个调用什么都不做,string可能把它的容量减少为size()和n中大的数,但string的大小没有改变。
 Vector0.reserve(50);
 ShowInfo("Vector0",Vector0);

 //resize(Container::size_type n)强制把容器改为容纳n个元素。调用resize之后,size将会返回n。如果n小于当前大小,容器尾部的元素会被销毁。如果n大于当前大小,新默认构造的元素会添加到容器尾部。如果n大于当前容量,在元素加入之前会发生重新分配。
 Vector0.resize(2);
 ShowInfo("Vector0",Vector0);
}



Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=711605