目录
vector被设计成了类模板
一、构造函数
构造函数中的const allocator_type& alloc = allocator_type() 是空间配置器,日常使用基本用不到,所以可以忽略
default (1) | explicit vector (const allocator_type& alloc = allocator_type()); |
---|---|
fill (2) | explicit vector (size_type n, const value_type& val = value_type(), const allocator_type& alloc = allocator_type()); |
range (3) | template <class InputIterator> vector (InputIterator first, InputIterator last, const allocator_type& alloc = allocator_type()); |
copy (4) | vector (const vector& x); |
1.无参构造 explicit vector ()
2.有参构造 explicit vector (size_type n, const value_type& val = value_type())
size_type相当于size_t(只限于容器中使用),value_type是vector中的第一个模板参数类型(即容器中的数据类型),value_type()返回值是同第一个模板参数类型的0,(意味着缺省参数为0)
3.范围构造 template <class InputIterator>
vector (InputIterator first, InputIterator last)
范围构造函数被设计为函数模板,通常传入迭代器
4.拷贝构造 vector (const vector& x)
vector<int> v1;//
vector<int> v2(5);/*0 0 0 0 0 0*/ vector<int> v3(5, 1);//1 1 1 1 1
vector<int> v4(v2.begin() + 1, v2.end() - 1);//0 0 0
vector<int> v5(v4);//0 0 0
二、赋值运算符重载
copy (1) | vector& operator= (const vector& x); |
---|
vector& operator= (const vector& x)
vector<double> v1(5, 3.14);//3.14 3.14 3.14 3.14 3.14
vector<double> v2;
v2 = v1;
三、迭代器
begin、end、rbegin、rend、cbegin、crend、crbegin、crend
同string容器迭代器,参见文章《C++中的string容器迭代器-CSDN博客》
四、容量操作
1.size 求大小 size_type size () const
2.capacity 求容量 size_type capacity() const
3.resize 扩充大小(指定数据)void resize (size_type n, value_type val = value_type())
可用于删除数据、初始化数据、扩容
n<size:删除多余数据;size<=n<=capacity:填充指定数据(初始化指定数据);size>capacity:扩容+填充指定数据(初始化指定数据)
4.reserve 扩容 void reserve (size_type n)
5.shrink_to_fit 缩容(默认缩容到size,与扩容机制有关) void shrink_to_fit ()
6.empty 判空 bool empty() const
//查看vector的扩容机制,为1.5倍扩容:
vector<int> v;
while (v.capacity() < 100)
{
size_t capacity = v.capacity();
v.push_back(1);
if (capacity != v.capacity())
cout << "capacity changed :" << v.capacity() << endl;
}
//capacity changed :1
//capacity changed :2
//capacity changed :3
//capacity changed :4
//capacity changed :6
//capacity changed :9
//capacity changed :13
//capacity changed :19
//capacity changed :28
//capacity changed :42
//capacity changed :63
//capacity changed :94
//capacity changed :141
五、元素访问
[ ]访问、at访问、front访问、back访问
同string容器,参见文章《C++中string容器的元素访问-CSDN博客》
六、修改操作
1.assign 覆盖
range (1) | template <class InputIterator> void assign (InputIterator first, InputIterator last); |
---|---|
fill (2) | void assign (size_type n, const value_type& val); |
范围覆盖、n个数据覆盖
vector<int> v1(10, 1);
vector<int> v2(10, 2);
v1.assign(v2.begin() + 5, v2.end());//2 2 2 2 2
v1.assign(5, 3);//3 3 3 3 3
2.push_back 尾插 void push_back (const value_type& val)
3.pop_back 尾删 void pop_back()
4.insert 指定位置插入
single element (1) | iterator insert (iterator position, const value_type& val); |
---|---|
fill (2) | void insert (iterator position, size_type n, const value_type& val); |
range (3) | template <class InputIterator> void insert (iterator position, InputIterator first, InputIterator last); |
指定位置插入单个数据、指定位置插入n个数据、指定位置插入一组数据
vector<int> v1(5, 1);
vector<int> v2;
v2.insert(v2.begin(), 9);//9
v2.insert(v2.begin(), 4, 8);//8 8 8 8 9
v2.insert(v2.end(), v1.begin(), v1.end());//8 8 8 8 9 1 1 1 1 1
5.erase 指定位置删除
iterator erase (iterator position) iteartor erase (iterator first, iterator last)
指定位置删除、指定范围区间删除
vector<int> v1(5, 1);
v1.erase(v1.begin());//1 1 1 1
v1.erase(v1.begin(), v1.end() - 1);//1
6.swap 交换数据 void swap (vector& x)
7.clear 清除数据 void clear ()
七、find 查找
vector容器中没有提供find函数,但是在C++算法库中有find,find被设计成函数模板,这样在vector、list等容器中都可以使用
如果找不到数据则返回last
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
vector<int>::iterator pos = find(v.begin(), v.end(), 4);
if(pos!=v.end())
v.insert(pos, 100);//1 2 3 100 4 5