vector
是一个封装了动态大小数组的顺序容器,向量是一个能够存放任意类型的动态数组。
迭代器
https://blog.csdn.net/lpstudy/article/details/80281769
迭代器类型
vector<int>::iterator it1;//it1能读写vector<int>中的元素
string ::interator it2;//it2能读写String中的元素
vector<int>::const_iterator it3;//只能读
string::const_iterator it4;//只能读
auto b=v.begin();
auto c=v.end();
// 对象是常量 返回值const_iterator 如果不是iterator
auto it3=v.cbegin();
auto it4=v.cend();
//无论vector对象(或string对象)本身是否为常量,返回值都是都是const_iterator
解引用:
获取地址的值
int *p= &a; //定义一个整型指针 p 并且p指向了a的地址 (&取地址)
*p=10; //解引用, 即 给a赋值10;
(*it)empty();//解引用it,然后调用对象的empty();对象
*it.empty();//错误
箭头运算符(->)即表示:
it->mem==(it*).mem;
vector的限制
不能在for循环中添加对象。改变容量eg:push_back会使vector的迭代器失效
迭代器的运算
举例,指向某vector对象的中间位置:
auto mid=vi.begin()+mid.size()/2;
/*下标从0开始*/
迭代器二分搜索
二分法,即从中间开始搜索,元素小于中间值从前半段搜索,大于中间值,从后半段开始。
auto target;
vetor <int> text;
auto beg=text.begin();
auto end=text.end();
auto mid=text.begin();+(text.begin()-text.end());
while(mid!=end&&*(mid)!=target){
if(target<mid){
end=mid;
}else{
beg=mid+1;
}
mid=beg+(end-beg)/2;
}