c++ vector用法和迭代器

1.在c++中,vector是一个十分有用的容器,下面对这个容器做一下总结。

(1)头文件#include<vector>.

(2)创建vector对象,vector<int> vec;

(3)初始化vector对象,vector<T> v1;  类型为T的默认初始化

                                   vector<T> v2(n,val); v2中包含了n个类型为T值为val的元素

                                   vector<T> v3{  a, b, c ...  }; 列表初始化 

 注:vector<int> v1{10,1}; v1有两个 元素 0和1

        vector<int> v2(10,1); v2有十个元素,每个都是1

(4)尾部插入元素:vec.push_back(a);

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

(6)使用下标访问元素,cout<<vec[0]<<endl;但是不能直接赋值,vec[0]=1//!!严重错误。

(7)删除元素:    vec.erase(vec.begin()+2);删除第3个元素

                         vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间从0开始

(8)向量大小:      vec.size();

(9)清空:             vec.clear();

 

(10)使用sort排序:需要头文件#include<algorithm>,

      sort(vec.begin(),vec.end());(默认是按升序排列,即从小到大).

      可以通过重写排序比较函数按照降序比较,如下:

      bool Comp(const int &a,const int &b)
   {
    return a>b;
   }
    调用时:sort(vec.begin(),vec.end(),Comp),这样就降序排序。


2. 迭代器比下标运算符更通用,所有标准库容器都可以使用迭代器。(string对象不属于容器类型,但同样支持)

(1) 迭代器访问元素

 使用begin成员返回指向第一个元素,end指向尾元素的下一位置。(即并不存在的尾后元素)

string s("some string");
for(auto it=s.begin();it!=s.end()&&!isspace(*it);++it)
  *it=toupper(*it)//当前字符改成大写形式

(2) 解引用获得所指对象  

 

  (*it).empty; //检查所指字符串是否为空

(3) 箭头运算符->

  it->empty();

(4)使用迭代器的循环体,不能向迭代器所属容器添加元素。(终止条件失效)

(5)使用迭代器进行二分搜索

 

#include <vector>
#include <iostream>
using namespace std;
int main()
{
	vector<int> text{1,2,3,4,5,6,7,8,9,10};
	int sought;
	cin>>sought;
	//迭代器二分搜索,text必须有序
	auto beg=text.begin(),end=text.end();
	auto mid=beg+(end-beg)/2;
	while(mid!=end&&*mid!=sought){
		if(sought<*mid)
			end=mid;
		else
			beg=mid+1;
		mid=beg+(end-beg)/2;
	}
	if(mid==end)
		cout<<"not found.\n";
	else
		cout<<*mid<<" is found.\n";
	return 0;
}


 

posted @ 2016-09-07 20:12  Neptune15  阅读(1253)  评论(0编辑  收藏  举报