<vector>容器详细讲解【算法刷题-数组】

1.引入"vector":

使用vector需包含头文件:vector

#include<vector>

2.基本概念:

  • 动态数组vector 的大小可以动态改变,即可以在运行时增减元素。
  • 自动内存管理vector 会自动管理存储空间,必要时扩展容量,而不需要手动分配或释放内存。
  • 随机访问:支持通过下标进行随机访问,与普通数组类似

3.常用操作:

1.创建与初始化:

vector<int> vec1;             // 创建一个空的vec1
vector<int> vec2(10);         // 创建一个包含 10 个元素的vec2
vector<int> vec3(10, 1);      // 创建一个包含 10 个元素且初始化为1的vec3
vector<int> vec4{1, 2, 3};    // 列表初始化:vec4初始化包含3个元素分别为 1,2,3
vector<int> vec5 = vec4;      // 拷贝初始化:用vec4拷贝一个vec5

2.访问元素:

vec1[0] = 10;          // 通过下标访问元素,不进行边界检查
int val = vec1.at(0);  // 通过 at() 方法访问元素,进行边界检查
int first = vec1.front();  // 访问第一个元素
int last = vec1.back();    // 访问最后一个元素

3.添加和删除元素:

vec1.push_back(5);      // 在末尾添加元素
vec1.pop_back();        // 移除最后一个元素
vec1.insert(vec1.begin(), 3);  // 在开头插入元素
vec1.erase(vec1.begin());      // 移除开头的元素
vec1.clear();            // 清空 vector 中的所有元素

4.大小和容量:

size_t size = vec1.size();       // 返回当前元素个数
size_t capacity = vec1.capacity();  // 返回当前容量(即不需重新分配内存时可以容纳的元素个数)
vec1.reserve(100);             // 预留空间,至少可以容纳 100 个元素
vec1.resize(50);               // 改变 vector 的大小为 50
vec1.shrink_to_fit();          // 收缩容量以适应当前大小
bool empty = vec1.empty();     // 判断 vector 是否为空

5.赋值与交换:

vector<int> vec6 = vec4;       // 拷贝赋值
vector<int> vec7(move(vec4));  // 移动赋值
vec1.swap(vec2);                    // 交换两个 vector 的内容

6.排序与算法:

sort(vec1.begin(), vec1.end());             // 排序
reverse(vec1.begin(), vec1.end());          // 反转
bool found = std::binary_search(vec1.begin(), vec1.end(), 3);  // 二分查找
for_each(vec1.begin(), vec1.end(), [](int &n) { n++; }); // 对每个元素执行操作

4.特殊的成员函数:

“emplace_back()” 可以在容器的末尾直接构造元素,与 insert() 类似,但效率更高,避免不必要的拷贝或移动操作。

vec1.emplace_back(10, 20);  // 直接构造一个对象放在末尾

vec1.emplace(vec1.begin(), 5);  // 在开头插入元素 5

5.多维向量(二维数组):

vector<vector<int>> matrix(3, vector<int>(4, 0));  // 创建一个 3x4 的二维数组,初始化为 0

6.迭代器操作:

vector<int>::iterator it = vec1.begin(); // 获得指向第一个元素的迭代器
vector<int>::iterator end = vec1.end();  // 获得指向最后一个元素之后的迭代器

for (auto it = vec1.begin(); it != vec1.end(); ++it) 
{
    cout << *it << " ";
}

for (auto rit = vec1.rbegin(); rit != vec1.rend(); ++rit) 
{ // 反向迭代器
    cout << *rit << " ";
}

vector<int>::const_iterator cit = vec1.cbegin();  // 常量迭代器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值