数组
数组
vector容器
vector的基本概念
- vector数据结构和数组非常相似,也称为单端数组
- 不同之处在于数组是静态空间,而vector可以动态扩展
- vector容器的迭代器是支持随机访问的迭代器
创建一个动态数组(动态数组在堆上创建内存):
std::vector<type> v; //创建一个动态数组
在当前函数中构造一个对象,再将此对象复制到数组中:
v.push_back({ 1,2 }); //用push_back给数组追加
动态扩展:
- 动态数组不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间。
动态数组的使用优化:
- 可提前为数组设置空间,省去每次扩大空间时造成的不必要的复制。
v.reserve(3); //为数组提前创建3个空间
- 使用emplace_back,传递构造函数的参数列表,直接使用参数列表在动态数组的内存内创建对象,从而避免不必要的复制。
v.emplace_back(1, 2);
vector构造函数
函数原型:
-
vector<T> v;
//采用模板实现类实现,默认构造函数std::vector<int> v;
-
vector(v.begin(), v.end());
//拷贝v[begin(), end())区间中的元素,是前闭后开,v.end()不包括在内 -
vector(n, elem);
//构造函数将n个elem拷贝给本身。std::vector<char> v(10, 'a');
-
vector(const vector &vec);
//拷贝构造函数。std::vector<int> vec(10, 0); std::vector<int> v(vec)
vector赋值操作
函数原型:
-
vector& operator=(const vector &vec);
//重载等号操作符std::vector<int> v1; //无参构造 v1.push_back(1); std::vector<int> v2 = v1;
-
assign(beg, end);
//将[beg, end)区间中的数据拷贝赋值给本身。std::vector<int> v2.assign(v1.begin(), v1.end());
-
assign(n, elem);
//将n个elem拷贝赋值给本身。v2.assign(10, 2);
静态数组(array)
创建一个静态数组(静态数组在栈上创建内存):
std::array<int, 10> data;
静态数组有边界检查。