C++中的vector
容器展开系统讲解,具体内容如下:
1. vector的定义和特性(基础概念)
- 讲解
vector
作为动态数组的核心特性:自动内存管理、动态扩容机制(倍增策略) - 对比普通数组:支持随机访问、尾部操作高效(O(1))、中间插入低效(O(n))
- 底层实现原理:连续内存空间、capacity与size的区别
2. vector的常用函数(核心API)
- 基础操作:
push_back()
、pop_back()
、size()
、empty()
- 元素访问:
operator[]
、at()
、front()
、back()
的安全性对比 - 容量管理:
reserve()
预分配内存、resize()
调整大小 - 迭代器使用:
begin()
/end()
、rbegin()
/rend()
3. vector排序去重(算法应用)
- 使用STL算法:
sort(v.begin(), v.end())
实现升序/降序排序 - 结合
erase
与unique
实现去重:v.erase(unique(v.begin(), v.end()), v.end())
- 注意事项:必须「先排序后去重」的底层逻辑(unique只能处理相邻重复)
- 自定义排序:通过lambda表达式实现复杂对象排序
4. 代码示例(综合实践)
- 典型应用场景:动态数据收集、算法题中的高频使用
- 完整示例可能包含:
vector<int> v = {5,3,2,5,1}; sort(v.begin(), v.end()); v.erase(unique(v.begin(), v.end()), v.end()); for(auto num : v) cout << num << " "; // 输出:1 2 3 5
练习
#include <bits/stdc++.h>
using namespace std;
int main() {
cout<<"hello"<<'\n';
vector<int> a;
a.push_back(2);
// a.push_back();
a.push_back(2);
a.push_back(222);
a.push_back(2);
a.push_back(2233);
a.push_back(2);
cout<<"---------------\n";
for(const auto& num:a)
cout<<num<<'\n';
sort(a.begin(),a.end());
cout<<"---------排序后------\n";
for(const auto& num:a)
cout<<num<<'\n';
a.erase(unique(a.begin(),a.end()),a.end());
cout<<"---------去重后------\n";
for(const auto& num:a)
cout<<num<<'\n';
return 0;
}
练习2
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> numbers = {1, 2, 3, 4, 5}; // 初始化示例数据
// 【核心操作1】插入元素到索引2位置
numbers.insert(numbers.begin() + 2, 10);
cout << "插入后的向量: ";
for (const auto& num : numbers) {
cout << num << " ";
}
cout << endl;
// 【核心操作2】删除索引2的元素
if (!numbers.empty()) {
numbers.erase(numbers.begin() + 2); // 安全删除
}
cout << "删除后的向量: ";
for (const auto& num : numbers) {
cout << num << " ";
}
cout << endl;
// 【核心操作3】获取向量大小
cout << "向量大小: " << numbers.size() << endl;
// 【核心操作4】清空向量
numbers.clear(); // 或使用 swap(vector<int>().swap(numbers));
cout << "清空后状态: ";
if (numbers.empty()) {
cout << "向量已为空" << endl;
} else {
for (const auto& num : numbers) {
cout << num << " ";
}
}
cout << endl;
return 0;
}