vector容器
容器简介
- 连续
- 动态数组(可增长)
- 随机存取
- 尾部添加或删除比较快,在头部或者中间比较慢
#include <vector>
使用
默认构造(模板类实现)
1 | vector<T> vecT; //T是数据类型,vecT是vector容器名 |
带参数构造
vector(beg, end);构造函数将[beg, end)中的元素拷贝给本身。注意区间是左闭右开。(beg -> begin)vector(n, elem);构造函数将n个elem拷贝给本身。vector(const vector &vec);构造拷贝函数。
1 | int iArray[] = {1, 2, 3, 4, 5}; |
赋值
vector.assign(beg, end);将[beg, end)中的元素拷贝给本身。注意区间是左闭右开。vector.assign(n, elem);将n个elem拷贝给本身。vector & operator = (const vector &vec);重载等号操作符。vector.swap(vec);将vec与本身的元素互换。
assign赋值时会先清空原本内容,再进行赋值。
1 | vector<int> vecIntA, vecIntB, vecIntC, vecIntD; |
判断大小
vector.size();返回容器中元素个数。vector.empty();判断容器是否为空。vector.resize(num);重新指定容器长度为num,变长则添加默认值,变短则删除末尾元素。vector.resize(num, elem);变长则添加elem。
1 | int iArray[] = {1, 2, 3, 4, 5}; |
访问容器中元素
vector.at(idx);返回索引idx所指的数据,若下标越界,抛出out_of_range异常并终止。vector[idx];返回索引dix所指的数据,若下标越界,不抛出异常,直接终止。
1 | int iArray[] = {1, 2, 3, 4, 5}; |
插入元素
vector.push_back(elem);在末尾插入elem元素。vector.pop_back();删除末尾元素。vector.insert(vector.begin()+pos, elem);在pos位置插入elem元素(也就是elem变为第pos位),第一个参数为指针。返回值为指向当前位置的有效迭代器。vector.insert(vector.begin()+pos, n, elem);在pos位置插入n个elem元素。vector.insert(vector.begin()+pos, beg, end);在pos位置插入[beg, end)中的元素,其中beg和end是指针。(可以是其他数组或vector)
1 | int iArray1[] = {1, 2, 3, 4, 5}; |
嵌套
- vector中的每个元素都是vector。
- 表示矩阵或其他二维vector。
1 | vector<vector<int>> matrix(3, vector<int>(3, 0)); //matrix为3行,每行为vector<int>(3, 0) |
迭代器使用
vector<int>::iterator iter;变量名为iter。begin()返回容器第一个元素的正向迭代器。end()返回指向最后一个元素后一个位置的正向迭代器。
类似指针
1 | int iArray[] = {1, 2, 3, 4, 5}; |
迭代器
概念
- 迭代器是一种检查容器内元素并且遍历容器内元素的数据类型。
- 迭代器提供对一个容器对象的访问方法,并且定义了容器中对象的范围。
- 迭代器统一了对所有容器的访问方式。
失效
插入元素后失效
用insert插入后,改变了内存地址,导致失效。
insert()函数有返回值,返回值为指向insert位置的新的有效迭代器。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16int main(){
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
vector<int>::iterator it = v.begin() + 3;
v.insert(it, 6);
cout << *it << endl; //迭代器失效
return 0
//it = v.insert(it, 6); it被更新为有效迭代器
//cout << *it << endl; //输出值为6
//return 0
}
删除元素后失效
删除元素相当于把后面的元素向前移一位,覆盖掉需要删除的元素。
1 | int main(){ |
- Title: vector容器
- Author: SyEic_L
- Created at : 2025-02-19 20:42:33
- Updated at : 2025-02-27 22:00:58
- Link: https://blog.syeicl.vip/2025/02/19/vector容器/
- License: This work is licensed under CC BY-NC-SA 4.0.
Comments