当前位置: 首页 > news >正文

std::vector 的基本用法

在 C++ 中,std::vector 是标准库提供的动态数组容器,支持自动扩容、随机访问,是最常用的容器之一。

一、基础用法

1.头文件与命名空间

#include <vector>
using namespace std; //或显示使用 std::vector
2.定义与初始化
// 定义空 vector
vector<int> vec1;                          // 存储 int 类型的空容器// 初始化为 n 个值为 val 的元素
vector<int> vec2(5, 10);                   // 5 个元素,每个都是 10 → [10,10,10,10,10]// 用初始化列表初始化(C++11+)
vector<int> vec3 = {1, 2, 3, 4};           // 直接初始化元素 → [1,2,3,4]// 复制另一个 vector
vector<int> vec4(vec3);                    // 复制 vec3 的内容 → [1,2,3,4]
vector<int> vec5 = vec3;                   // 同上

二、常用成员函数

1.元素访问

函数 功能说明 示例
operator[] 访问索引 i 处的元素(无越界检查) vec[2] = 100;
at(i) 访问索引 i 处的元素(有越界检查,抛异常) int x = vec.at(2);
front() 返回第一个元素 int first = vec.front();
back() 返回最后一个元素 int last = vec.back();
data() 返回指向底层数组的指针(直接操作内存) int* ptr = vec.data();

2. 容量与大小

函数 功能说明 示例
size() 返回当前元素个数 int len = vec.size();
empty() 判断容器是否为空(size() == 0) if (vec.empty())
capacity() 返回当前可容纳的最大元素数(未扩容前) int cap = vec.capacity();
reserve(n) 预分配至少能容纳 n 个元素的内存(不改变 size) vec.reserve(100); // 预留空间
resize(n, val) 调整容器大小为 n,新增元素用 val 填充 vec.resize(5, 0); // 大小调整为 5

3. 元素修改

函数 功能说明 示例
push_back(val) 在尾部添加元素 vec.push_back(5);
pop_back() 删除尾部元素(不返回值) vec.pop_back();
insert(pos, val) 在迭代器 pos 位置插入 val vec.insert(vec.begin() + 2, 10);
erase(pos) 删除迭代器 pos 位置的元素 vec.erase(vec.begin() + 1);
erase(beg, end) 删除 [beg, end) 范围内的元素 vec.erase(vec.begin(), vec.begin()+2);
clear() 清空所有元素(size() 变为 0,capacity 不变) vec.clear();
swap(vec2) 与另一个 vector 交换内容(高效,常数时间) vec.swap(vec2);

4. 迭代器(遍历用)

函数 功能说明 示例
begin() 返回指向第一个元素的迭代器 for (auto it = vec.begin(); it != vec.end(); ++it)
end() 返回指向最后一个元素后一位的迭代器 同上(作为循环结束条件)
rbegin() 返回指向最后一个元素的反向迭代器 for (auto it = vec.rbegin(); it != vec.rend(); ++it)
rend() 返回指向第一个元素前一位的反向迭代器 同上(反向遍历)

三、遍历 vector 的几种方式

vector<int> vec = {1, 2, 3, 4, 5};// 1. 下标遍历(适合随机访问)
for (int i = 0; i < vec.size(); ++i) {cout << vec[i] << " ";
}// 2. 迭代器遍历(最通用,支持所有容器)
for (vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {cout << *it << " ";
}// 3. 范围 for 循环(C++11+,简洁)
for (int x : vec) {cout << x << " ";
}// 4. 反向遍历
for (vector<int>::reverse_iterator it = vec.rbegin(); it != vec.rend(); ++it) {cout << *it << " ";  // 输出:5 4 3 2 1
}

四、注意事项

1.动态扩容:当 size() == capacity() 时,push_back 会触发扩容(通常是翻倍分配新内存,复制旧元素,释放旧内存),效率较低。提前用 reserve(n) 预留空间可避免频繁扩容。

2.越界访问:operator[] 不检查越界,越界访问会导致未定义行为;at() 会检查越界并抛出 out_of_range 异常,更安全但略慢。

3.内存管理:vector 会自动释放内存,无需手动管理,但 clear() 不会释放已分配的内存(仅清空元素),若需释放内存可配合 swap:

vector<int>().swap(vec);  // 交换一个临时空 vector,触发内存释放

五、示例:综合使用

#include <iostream>
#include <vector>
using namespace std;int main() {vector<int> vec;// 添加元素vec.push_back(10);vec.push_back(20);vec.push_back(30);// 插入元素vec.insert(vec.begin() + 1, 15);  // 在索引1处插入15 → [10,15,20,30]// 遍历输出cout << "元素: ";for (int x : vec) {cout << x << " ";  // 输出:10 15 20 30}// 修改元素vec[2] = 25;  // → [10,15,25,30]// 容量信息cout << "\nsize: " << vec.size()      // 4<< ", capacity: " << vec.capacity() << endl;  // 通常为4或8(取决于实现)// 删除元素vec.erase(vec.end() - 1);  // 删除最后一个元素 → [10,15,25]return 0;
}
http://www.sczhlp.com/news/66379/

相关文章:

  • 如何快速提升网站流量承德市住房和城乡建设局网站
  • 网站推广的实际案例网页制作工具分为
  • 站群个人网站建设第一步
  • 网站开发切换电脑版与手机版WordPress文章设置时间免费
  • 注册账号自建网站wordpress 中的函数大全
  • 廊坊网站推广排名发生太多重定位wordpress
  • 关键词工具网站手机网站 推广
  • 海外网站推广方案重新建设网站的请示
  • 网站设计时应考虑哪些因素广告公司起名如何起
  • 如何建造企业网站傻瓜做网站软件
  • 用vue做网站哪里购买域名
  • 绵阳微网站制作汉服设计制作培训
  • 毕业设计网站开发要做什么做团膳有哪些网站
  • 推广做黄页网站公司查询网全国企业信息查询官网
  • 做网站好一点的公司wordpress用户站内信
  • 淘客网站超级搜怎么做网站模块介绍
  • 百通互联网站建设网站开发好要租服务器吗
  • 网站模板免费下载中文版wordpress 管理界面
  • 9月4日
  • BSP、BVH、八叉树
  • 域名注册和网站哪个好租服务器发布网站
  • 怎么做前端网站收录网站查询
  • 福州网络营销网站php响应式网站开发百度云
  • 做羞羞事的网站网站免费优化平台
  • 惠州网站关键字优化平面设计在哪里接单
  • 星际争霸1无障碍 MOD | Starcraft Access
  • 【神器Collection】格式转换神器——ConvertIO
  • POLIR-Management-Community-Onboarding+Orientation: 招募新员工的入职与培训 的 社区化组织
  • 重庆广告网站推广软件项目管理平台
  • 网站备案变更单位名称手机软件商店免费下载