一.vector
前面已经讲了vector创建的方法。现在主要讲他的方法的迭代器等注意事项。
迭代器其实就是广义指针,它可以是指针,也可以是一个可对其执行类似指针的操作-----如解除引用的对象。可以将指针广义化为迭代器,让STL能够为各种不同的容器类(包括那些简单指针无法处理的类)提供统一的接口。每个容器类都定义了一个合适的迭代器,该迭代器的类型是一个名为iterator的typedef,其作用域是整个类。
begin()返回一个指向容器第一个元素的迭代器,end()返回一个表示超过容器尾的迭代器
例如要为vector的double类型规范一个迭代器,可以这样做:
vector<double>::iterator pd//pd an iterator
wector<doublr>scores
可以用迭代器pd执行这样的操作:
pd=scores.begin();
*pd=22.3;
pd++;
迭代器的行为就像是指针,c++11有自动类型推断功能;
例如:可以用
auto pd=scores.begin();来代替vector<double>::iterator pd=scores.begin();
可以用以下代码来显示容器内容:
for(pd=scores.begin();pd!=scores.ends();pd++)
cout<<*pd;
需要添加元素的话 只需要v.push_back();即可
需要删除数组的元素的话,使用v.erase(v.begin()+1)
它可以删除一段区间的所有元素。v.erase(v.begin()+1,v.begin()+5); 删除的是下标1,2,3,4的元素。并没有删除下标为5的元素,这一点需要注意!删除的是到v.begin()+5前一个元素为止的。
插入元素的话 使用v.insert(v.begin(),1);在第零个元素前面插1
v.insert(v.begin()+2,2);在第二个元素前插2
v.insert(v.end(),1000);注意 这个是在最后一个元素后面插的1000,而并不是最后一个的前面。大家可以自己自己试试。
v.size();元素的个数
v.clear();清除所有元素
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int>::iterator it;
vector<int > v;
int i;
for(i=0;i<10;i++)//添加10个元素 1,2,3....
{
v.push_back(i);
}
for(it=v.begin();it!=v.end();it++)//遍历一下整个数组
cout<<*it<<" ";
cout<<endl;
v.erase(v.begin()+1);//删除的是第一个元素(下标从0开始)
// 也就是1 ,所以现在是0,2,4...9
v.insert(v.begin()+1,1);//把删除的再加进去
v.erase(v.begin()+1,v.begin()+4);//删除的第1,2,3 的元素共三个元素
//也就是剩下的是 0,4,5,6,7,8,9
for(it=v.begin();it!=v.end();it++)//遍历一下整个数组
cout<<*it<<" ";
cout<<endl;
cout<<v.size()<<endl;//看一下数组的大小
v.clear();
cout<<v.size()<<endl;
return 0;
}
1.push_back 在数组的最后添加一个数据
2.pop_back 去掉数组的最后一个数据
3.at 得到编号位置的数据
4.begin 得到数组头的指针
5.end 得到数组的最后一个单元+1的指针
6.front 得到数组头的引用
7.back 得到数组的最后一个单元的引用
8.max_size 得到vector最大可以是多大
9.capacity 当前vector分配的大小
10.size 当前使用数据的大小
11.resize 改变当前使用数据的大小,如果它比当前使用的大,者填充默认值
12.reserve 改变当前vecotr所分配空间的大小
13.erase 删除指针指向的数据项
14.clear 清空当前的vector
15.rbegin 将vector反转后的开始指针返回(其实就是原来的end-1)
16.rend 将vector反转构的结束指针返回(其实就是原来的begin-1)
17.empty 判断vector是否为空
18.swap 与另一个vector交换数据
原文:https://www.cnblogs.com/flyljz/p/10993518.html