简介:
声明:
迭代器:
用法:
遍历vector
插入元素
排序
查找元素
二维数组:
定义
插入操作
vector类称作向量类,它实现了动态的数组,用于元素数量变化的对象数组。
顺序容器中的元素按照严格的线性顺序排序。可以通过元素在序列中的位置访问对应的元素。
扩大新元素时,如果超过当前的容量,则容量会自动扩充2倍,如果2倍容量仍不足,则继续扩大2倍。
vector
构造函数:
vector():创建一个空的vector。
vector(itn nSize):创建一个vector,元素个数为nSize。
vector(int nSize, const T& t):创建一个vector,元素个数为nSize,且值均为t。
vector(const vector&):拷贝构造函数。
vector vec; //声明一个int型向量
vector vec(5); //声明一个初始大小为5的int向量
vector vec(10, 1); //声明一个初始大小为10且值都是1的向量
vector vec(tmp); //声明并用tmp向量初始化vec向量
vector tmp(vec.begin(), vec.begin() + 3); //用向量vec的第0个到第2个值初始化tmp
int arr[5] = {1, 2, 3, 4, 5};
vector vec(arr, arr + 5); //将arr数组的元素用于初始化vec向量
//和vec.end()指针统一。
vector vec(&arr[1], &arr[4]); //将arr[1]~arr[4]范围内的元素作为vec的初始值
vector v4{10, 1}; // v4有2个元素,值分别是10和1
vector v5{"hi"}; // 列表初始化:v5有一个元素
vector
vector::reverse_iterator ritr; 反向迭代器
vector
cbegin()/cend()决定了返回的迭代器类型为const。这时即使vector的类型不是const,也可以防止对该数据的误操作。
at(idx) | 传回索引idx所指的数据,如果idx越界,抛出out_of_range。 |
back() | 返回最后一个元素,不检查这个数据是否存在。 |
front() | 返回第一个元素。 |
swap() | 交换两个Vector。 v1.swap(v2) ; 交换v1,v2 |
push_back(value) | 在Vector最后添加一个元素。 |
pop_back() | 它从向量中删除最后一个元素。 |
empty() | 判断Vector是否为空(返回true时为空) |
insert(iter,val) | 它将在指定位置插入新元素。 |
erase(iterator) | 删除指定或指定范围的元素。 |
resize(nsize) | 它修改向量的大小。 |
clear() | 它从向量中删除所有元素。 |
size() | 返回Vector元素数量的大小。 |
capacity() | 返回vector所能容纳的元素数量(在不重新分配内存的情况下) |
assign() | 它将新值分配给向量。 |
operator=(vector) | 它将新值分配给向量容器。 |
operator[](pos) | 它访问指定的元素。 |
end() | 返回最末元素的迭代器(实指向最末元素的下一个位置) |
emplace(pos,args) | 它将在位置pos之前插入一个新元素。 |
emplace_back(val) | 它在末尾插入一个新元素。 |
rend() | 它指向向量的第一个元素之前的元素。 |
rbegin() | 它指向向量的最后一个元素。 |
begin() | 返回第一个元素的迭代器。 |
max_size() | 返回Vector所能容纳元素的最大数量(上限)。 |
cend() | 它指向量中的last-last-element。 |
cbegin() | 它指向量的第一个元素。 |
crbegin() | 它指的是向量的最后一个字符。 |
crend() | 它指的是向量的第一个元素之前的元素。 |
data() | 它将向量的数据写入数组。 |
sort() | 排序 |
reverse() | 元素翻转 |
find () | 查找元素,返回地址 |
vector vec;
//迭代器遍历
vector::iterator it;
for (it = vec.begin(); it != vec.end(); it++)
cout << *it << endl;
//C++11
for(auto i:vec)
{
cout<
//push_back()插入
for (int i = 0; i != 100; i++) {
vec.push_back(i);
}
//错误的赋值
for(int i=0;i<10;++i) //下标只能用来获取已经存在的元素
{
vec[i]=i;
}
//insert()插入
vec.insert(vec.begin(),6); //在下标0元素前插入6
vec.insert(vec.begin()+3,1); //在下标3元素前插入1
v.insert(v.end(),3,0); //在尾部插入3个0
vec.insert(vec.begin()+1,a+2,a+6);//在下标1元素前插入a的第三个元素到第五个元素(不包括a+6)
//从小到大排序
sort(vec.begin(), vec.end());
//从大到小排序
//1.reverse函数
reverse(vec.begin(),vec.end());
//2.重写cmp
bool cmp(const int& a,const int& b)
{
return a>b;
}
sort(vec.begin(),vec.end(),cmp);
vector::iterator it;
it=find(vec.begin(), vec.end(), 6);
if(it!=vec.end())
cout<<*it<
vector > A; //正确的定义方式,后面的尖括号前要加上空格
vector> A; //c++11之前这样定义是错误的,c++11之后支持这种定义方式
vector >A(3); //定义二维动态数组大小3行
vec.size(); //二维数组的行数
vec[0].size(); //二维数组的列数
//A=[[0,1,2],[3,4,5]]
vector > A; // 大容器
//A.push_back里必须是vector
vector B; // 小容器
B.push_back(0);
B.push_back(1);
B.push_back(2);
A.push_back(B); // 小容器放入大容器
B.clear(); // 小容器元素清空
B.push_back(3);
B.push_back(4);
B.push_back(5);
A.push_back(B);
//或者
vector > v;
vector temp;
// 输入元素
for(i=0; i> num;
temp.push_back(num);
}
v.push_back(temp);
}
//遍历输出所有元素
for(i=0; i