文章目录
vector容器
概念与构造
动态扩展:
- 并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间
因为不能确保原来的空间后面是否有别的程序在用
对外提供的接口
前端封闭,尾部插入数据
push_back() 尾插
pop_back() 尾删
迭代器:
vector 提供了如下几种 迭代器
-
begin()/cbegin()
返回指向首元素的迭代器,其中 *begin = front。 -
end()/cend()
返回指向数组尾端占位符的迭代器,注意是没有元素的。 -
rbegin()/crbegin()
返回指向逆向数组的首元素的逆向迭代器,可以理解为正向容器的末元素。 -
rend()/crend()
返回指向逆向数组末元素后一位置的迭代器,对应容器首的前一个位置,没有元素。
以上列出的迭代器中,含有字符 c 的为只读迭代器,不能通过只读迭代器去修改 vector 中的元素的值。如果一个 vector 本身就是只读的,那么它的一般迭代器和只读迭代器完全等价。只读迭代器自 C++11 开始支持。
迭代器的随机访问:
vector容器的迭代器是支持随机访问的。指的是可以跳好几个访问。
关于随机访问的补充:STL中支持随机访问的迭代器
vector
容器的迭代器(iterator)是C++ STL(Standard Template Library)中提供的一种工具,用于访问和遍历vector
容器中的元素。迭代器提供了一种抽象化的方法,可以在不关心底层实现的情况下访问数据。迭代器可以理解为指向容器中元素的指针,可以通过迭代器进行元素的读取、修改等操作。
#include <iostream>
#include <vector>
int main() {
// 创建一个包含整数的vector
std::vector<int> vec = {
1, 2, 3, 4, 5};
// 声明一个迭代器,指向vector容器的开始
std::vector<int>::iterator it;
// 使用迭代器遍历vector中的元素,并输出
//这里就是输出打印
for (it = vec.begin(); it != vec.end(); ++it) {
std::cout << *it << " ";
}
// 输出结果:1 2 3 4 5
return 0;
}
函数原型:
vector<T> v;
//采用模板实现类实现,默认构造函数vector(v.begin(), v.end());
//将v[begin(), end())区间中的元素拷贝给本身。vector(n, elem);
//构造函数将n个elem拷贝给本身。vector(const vector &vec);
//拷贝构造函数。
由于v.end()是指向最后一个元素的下一个,所以第二条的区间是左闭右开。
容器的构造与打印输出
#include <vector>
void printVector(vector<int>& v) {
//将容器传进来打印。注意是引用传递
for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
//用迭代器访问和遍历vector容器的元素
cout << *it << " ";
}
cout << endl;
}
void test01()
{
//默认构造,无参构造
vector<int> v1;
for (int i = 0; i < 10; i++)
{
v1.push_back(i);
}
printVector(v1);
//区间方式构造
vector<int> v2(v1.begin(), v1.end());//第二种构造,把两个迭代器传进去,进行构造
printVector(v2);
//n个elem构造
vector<int> v3(10, 100);//这里的v3就是10个100,第一个是个数。第二个是赋值
printVector(v3);
//拷贝构造
vector<int> v4(v3);
printVector(v4);
//默认构造和拷贝构造用的比较多
}
赋值
功能描述:
- 给vector容器进行赋值
赋值常见操作
-
vector& operator=(const vector &vec);
//重载等号操作符 -
assign(beg, end);
//将[beg, end)区间中的数据拷贝赋值给本身。 -
assign(n, elem);
//将n个elem拷贝赋值给本身。
#include <vector>
void printVector(vector<int>