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

【C++ vector 使用教程】

C++ vector 使用教程

目录

  1. 头文件引入
  2. 初始化方法
  3. 元素访问
  4. 添加/删除元素
  5. 迭代器使用
  6. 动态二维数组
  7. 注意事项
  8. 练习OI

1. 头文件引入

#include <vector>

2. 初始化方法

创建空容器

std::vector<int> vec;  // 空vector

指定大小和初始值

std::vector<int> vec(5, 0);  // 5个0

列表初始化(C++11+)

std::vector<int> vec = {1, 2, 3};
// 或
std::vector<int> vec{1, 2, 3};

3. 元素访问

下标访问(不检查越界)

int x = vec[0];  // 第一个元素

at() 方法(越界抛出异常)

int y = vec.at(1);  // 第二个元素

首尾元素访问

int first = vec.front();  // 第一个元素
int last = vec.back();    // 最后一个元素

4. 添加/删除元素

尾部操作

vec.push_back(4);  // 末尾添加元素(O(1))
vec.pop_back();    // 删除末尾元素(O(1))

中间操作

// 在第三个位置插入10(O(n))
vec.insert(vec.begin() + 2, 10);  

// 删除第二个元素(O(n))
vec.erase(vec.begin() + 1);  

5. 迭代器使用

正向遍历

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

反向遍历

for (auto rit = vec.rbegin(); rit != vec.rend(); ++rit) {
    std::cout << *rit << " ";
}

6. 动态二维数组

创建二维数组

// 3行4列,初始化为0
std::vector<std::vector<int>> matrix(3, std::vector<int>(4, 0));

元素访问

matrix[1][2] = 5;  // 修改第二行第三列元素

7. 注意事项

预分配空间

vec.reserve(100);  // 预分配容量(不初始化元素)

迭代器失效

• 添加/删除元素后,原有迭代器可能失效
• 涉及容量变化时(如push_back导致扩容),所有迭代器都会失效
• 建议在修改操作后重新获取迭代器

性能建议

操作时间复杂度使用建议
push_backO(1)优先使用
insertO(n)避免频繁使用
eraseO(n)批量删除优先
random accessO(1)适合快速访问

练习-1265

在这里插入图片描述

#include <bits/stdc++.h>  
using namespace std;
int main()
{
  // 请在此输入您的代码

  int n;
  cin>>n;
  vector<int>v;

for(int i=0;i<n;++i){
   int num=0;
   cin>>num;
   v.push_back(num);


}
sort(v.begin(),v.end());

    for (int val : v) {
        cout << val << " ";
    }
cout<<"\n";
for(int i=n-1;i>=0;i--){

    cout << v[i] << " ";


}

  return 0;
}

相关文章:

  • [通讯协议]485通信
  • DeepSeek:中国AGI破局者的技术革命与生态重构
  • 原生稀疏注意力NSA详解及代码复现
  • C++中的析构函数
  • 【cocos creator】热更新
  • SQL注入目录【绕过+布尔时间脚本】
  • 【从零开始学习计算机科学】计算机组成原理(六)异常事件处理
  • Manus无需邀请码即可使用的平替方案-OpenManus实测
  • 利用FatJar彻底解决Jar包冲突(一)
  • 【系统设计架构师】特定领域软件体系结构
  • MyBatis Mapper 接口的作用,以及如何将 Mapper 接口与 SQL 映射文件关联起来
  • 周鸿祎开始补录网安岗了
  • 2022IJCAI速读:SparseTT,使用稀疏Transformers进行视觉跟踪
  • EngineerCMS完整版发布,带freecad、math和mapus例子
  • es6+新增特性有哪些
  • DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之功能优化,添加列宽调整功能Table12
  • 二分查找(递归和迭代)– Python
  • 我想写日记了
  • 新能源汽车充电综合解决方案:安科瑞电气助力绿色出行
  • 第二章:C++标准库
  • 媒体:多家国有大行存款利率即将迎来新一轮下调
  • 半年不到再换岗:伊春市委常委、政法委书记方春彪任伊春森工集团党委书记
  • 这位中国电影早期的全能奇才,90年前唱响国歌
  • 中国证监会副主席李明:目前A股估值水平仍处于相对低位
  • 取得金奖西瓜品种独家使用权的上海金山,为何要到异地“试种”?
  • 广东高州发生山体滑坡,造成2人遇难4人送医救治1人失联