一、vector
主要特征
-
vector
实际上就是对动态数组封装;
- 可以像数组一样可以使用下标访问元素,若
vector
长度为n
, 则其下标为 0~n-1
;
- 根据下标访问元素效率高;
-
vector
对象的空间随着插入删除操作自动调整;
- 空间自动调整比较耗费时间,因此频繁插入删除的情况下,
vector
效率稍差;
二、vector
创建对象
创建一个空向量
vector<int> v1; // int 类型向量
vector<string> s1; // string 类型向量
从已有向量复制创建向量
vector<int> v2( v1 ); // 拷贝v1内容到v2(拷贝构造函数)
创建10个元素的向量
vector<string> s2( 10 );
创建10个元素的向量,所有元素都是 1.5
vector<double> v3( 10, 1.5 );
创建向量指针
vector<int> *pvec = new vector<int>( 10, -5 );
三、vector
操作
vector 尾部添加元素
vector<int> v1; v1.push_back(1);
vector 任意位置插入元素
v1.insert(v1.begin(),0); // 头部插入
v1.insert(v1.end(), 4); //尾部插入
v1.insert(v1.end()-1,3); //倒数第二位置
//v1.begin(), v1.end() 获取相应位置的迭代器
vector 删除最后一个元素
v1.pop_back(); // 删除最后一个元素
vector 删除任意位置元素
v1.erase(v1.begin()); // 删除第一个元素
v1.erase(v1.begin(), v1.end()); // 删除全部元素
v.size() 返回向量的大小
v.empty() 返回向量是否为空
1、向量上的迭代器定义、使用:
vector<int>::iterator it; *it = 5;
2、每种容器都定义了一对begin和end的函数,用于返回迭代器。
如果容器中有元素,由begin返回的迭代器指向第一个元素:
it = v1.begin(); // 指向v1[0]
3、由end返回的迭代器指向vector的末端元素的下一个。
通常称为超出末端迭代器,表明它指向了一个不存在的元素
it = v1.end(); // 指向末端元素的下一个
如果vector为空,begin返回的迭代器与end返回的迭代器相同
void sort( first, last)
first和last这两个参数都是容器的迭代器,它们给出了容器中的查找区间起点和终点;
******** example ***********
sort(v.begin(),v.end());
vector<string>::iterator it;
for(it=v.begin(); it!=v.end();it++)
cout<< *it <<" ";
find( first, last, val)
1、first 和 last 这两个参数都是容器的迭代器,它们给出了容器中的查找区间起点和终点;
2、这个区间是个左闭右开的区间[first,last);
3、val参数是要查找的元素的值;
4、函数返回值是一个迭代器。如果找到,则该迭代器指向被找到的元素。如果找不到,则该迭代器指向查找区间终点;
******** example ***********
vector<int> v(5,3); vector<int>::iterator p;
p = find(v.begin(),v.end(),3);
if( p!=v.end()) cout<<*p<< endl;
p = find(v.begin(),v.end(),5);
if( p==v.end()) cout<<"not found\n";
replace( first, last, old, new ) // first, last为迭代器 作用:将 [ first,last ) 范围内的所有值为old的替换为new
reverse(start, end) // start, end为迭代器 作用:将序列中 [start, end) 范围反转排列顺序
count(start, end, searchValue) // start, end为迭代器 作用:统计[start, end) 范围内等于searchValue的元素个数
accumulate(first, last, init) // first, last为迭代器 作用:将[ first,last )范围内的所有值相加,再加上init后返回
三、常见序列容器
屏幕快照 2018-10-02 下午4.14.03.png
屏幕快照 2018-10-02 下午4.14.18.png
屏幕快照 2018-10-02 下午4.14.31.png
网友评论