序列容器之Vector
是 C++ 标准库中的一种序列容器
Vector的特征
(1)Vector和Array相同点是:都是数组、都是contiguousIterator、容器内元素种类都相同
(2)Vector和Array不同点是:Array是固定数组;Vector是动态数组,可以按需扩展数组大小
(3)vector 的存储是自动管理的,按需扩张收缩。
(4)vector 通常占用多于静态数组的空间,因为要分配更多内存以管理将来的增长
(5)vector 所用的方式不在每次插入元素时,而只在额外内存耗尽时重分配。
创建和初始化
#include <iostream>
#include <vector>
int main() {
// 创建一个空的vector
std::vector<int> vec;
// 使用初始值创建vector
std::vector<int> vec_with_size(5); // 创建一个包含5个元素的vector,元素值为默认值0
std::vector<int> vec_with_values(5, 10); // 创建一个包含5个元素的vector,元素值为10
// 使用列表初始化vector
std::vector<int> vec_with_list = {1, 2, 3, 4, 5};
return 0;
}
添加元素
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec;
// 在vector的末尾添加元素
vec.push_back(1);
vec.push_back(2);
vec.push_back(3);
// 插入元素到指定位置
vec.insert(vec.begin() + 1, 4); // 在第二个位置插入4
for (int val : vec) {
std::cout << val << " "; // 输出: 1 4 2 3
}
std::cout << std::endl;
return 0;
}
访问元素
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
// 使用下标访问元素
std::cout << vec[0] << std::endl; // 输出: 1
// 使用at()方法访问元素
std::cout << vec.at(1) << std::endl; // 输出: 2
// 访问第一个和最后一个元素
std::cout << vec.front() << std::endl; // 输出: 1
std::cout << vec.back() << std::endl; // 输出: 5
// 获取底层数组指针
int* data = vec.data();
std::cout << data[2] << std::endl; // 输出: 3
return 0;
}
遍历元素
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
// 使用范围for循环遍历
for (int val : vec) {
std::cout << val << " ";
}
std::cout << std::endl;
// 使用传统for循环遍历
for (size_t i = 0; i < vec.size(); ++i) {
std::cout << vec[i] << " ";
}
std::cout << std::endl;
// 使用迭代器遍历
for (auto it = vec.begin(); it != vec.end(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
return 0;
}
删除元素
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
// 删除最后一个元素
vec.pop_back();
// 删除指定位置的元素
vec.erase(vec.begin() + 1); // 删除第二个元素
// 删除指定范围的元素
vec.erase(vec.begin(), vec.begin() + 2); // 删除前两个元素
for (int val : vec) {
std::cout << val << " "; // 可能输出: 4 5
}
std::cout << std::endl;
return 0;
}
其他常用操作
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
// 获取vector的大小
std::cout << "Size: " << vec.size() << std::endl; // 输出: Size: 5
// 检查vector是否为空
std::cout << "Is empty: " << std::boolalpha << vec.empty() << std::endl; // 输出: Is empty: false
// 改变vector的大小
vec.resize(3); // 现在vec包含3个元素
// 清空vector
vec.clear(); // 现在vec为空
for (int val : vec) {
std::cout << val << " "; // 不会输出任何东西,因为vec为空
}
std::cout << std::endl;
return 0;
}
总结
定义:Vector是定义在命名空间std内的模板,是一种随机迭代器,其内存管理是一块连续分配的内存,支持动态扩展。
头文件:,在使用时需要包含此头文件。
特点:
元素连续存储,支持随机访问,访问效率与数组相同。
动态大小管理,容器大小可以自动调整。
分配额外的空间以适应可能的增长,避免频繁的内存重新分配。
学习记录,侵权联系删除。
来源:朱老师物联网大课堂