【C++】std::vector

std::vector:

std::vector 是 C++ 标准库中的一个动态数组容器,它提供了一个可以动态调整大小的数组。std::vector 是一个非常常用的容器,主要用于存储和管理元素的集合,并且支持高效的随机访问和动态调整大小。

基本特性

  1. 动态大小 : std::vector 可以根据需要动态地增加或减少大小,自动管理内存。
  2. 随机访问 : 支持高效的随机访问,通过 operator[]at() 方法可以直接访问元素。
  3. 连续存储 : 内部存储是连续的,这使得 std::vector 支持快速的元素访问和高效的缓存性能。
  4. 自动管理内存 : std::vector 会自动管理内存,不需要用户手动释放内存。

常用操作

以下是一些 std::vector 的常用操作及其示例:

1. 创建 std::vector
cpp 复制代码
#include <vector>

int main() {
    // 创建一个空的 vector,元素类型为 int
    std::vector<int> vec1;

    // 创建一个初始化为 10 个元素的 vector,元素值为 0
    std::vector<int> vec2(10);

    // 创建一个初始化为 10 个元素的 vector,元素值为 5
    std::vector<int> vec3(10, 5);

    // 使用初始化列表创建 vector
    std::vector<int> vec4 = {1, 2, 3, 4, 5};
    
    return 0;
}
2. 访问和修改元素
cpp 复制代码
#include <vector>
#include <iostream>

int main() {
    std::vector<int> vec = {10, 20, 30, 40, 50};

    // 通过下标访问
    std::cout << "Element at index 2: " << vec[2] << std::endl;

    // 使用 at() 方法访问,提供边界检查
    std::cout << "Element at index 3: " << vec.at(3) << std::endl;

    // 修改元素
    vec[2] = 100;
    std::cout << "Modified element at index 2: " << vec[2] << std::endl;

    return 0;
}
3. 添加和删除元素
cpp 复制代码
#include <vector>
#include <iostream>

int main() {
    std::vector<int> vec;

    // 添加元素到末尾
    vec.push_back(10);
    vec.push_back(20);
    vec.push_back(30);

    std::cout << "Vector size after push_back: " << vec.size() << std::endl;

    // 删除末尾元素
    vec.pop_back();

    std::cout << "Vector size after pop_back: " << vec.size() << std::endl;

    // 清空所有元素
    vec.clear();
    std::cout << "Vector size after clear: " << vec.size() << std::endl;

    return 0;
}
4. 遍历 std::vector
cpp 复制代码
#include <vector>
#include <iostream>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    // 使用范围 for 循环
    for (const auto& elem : vec) {
        std::cout << elem << " ";
    }
    std::cout << std::endl;

    // 使用迭代器遍历
    for (auto it = vec.begin(); it != vec.end(); ++it) {
        std::cout << *it << " ";
    }
    std::cout << std::endl;

    return 0;
}
5. 其他常用方法
  • size() : 返回 vector 中元素的数量。
  • capacity() : 返回 vector 当前分配的内存容量(即当前可以容纳多少个元素而不需要重新分配内存)。
  • empty() : 判断 vector 是否为空。
  • reserve(): 预留一定的内存容量,减少重新分配的次数。
  • resize() : 改变 vector 的大小,并且可以用新大小填充默认值。

示例 :

cpp 复制代码
#include <vector>
#include <iostream>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};

    // 输出容量
    std::cout << "Initial capacity: " << vec.capacity() << std::endl;

    // 增加元素
    vec.push_back(6);

    // 输出容量
    std::cout << "Capacity after adding one element: " << vec.capacity() << std::endl;

    // 预留空间
    vec.reserve(20);
    std::cout << "Capacity after reserving space for 20 elements: " << vec.capacity() << std::endl;

    // 调整大小
    vec.resize(10, 0);
    std::cout << "Size after resizing to 10: " << vec.size() << std::endl;

    return 0;
}

在这段代码中,vec.resize(10, 0); 语句将 vec 的大小调整为 10。如果 vec 的当前大小小于 10,resize 方法会在末尾添加元素,新增的元素会被初始化为 0。如果 vec 的当前大小已经大于等于 10,resize 方法会将多余的元素移除,以使大小变为 10。

在调整大小后,std::cout << "Size after resizing to 10: " << vec.size() << std::endl; 语句将输出 vec 的新大小,也就是 10

相关推荐
Charles Ray3 分钟前
C++学习笔记 —— 内存分配 new
c++·笔记·学习
重生之我在20年代敲代码4 分钟前
strncpy函数的使用和模拟实现
c语言·开发语言·c++·经验分享·笔记
爱上语文5 分钟前
Springboot的三层架构
java·开发语言·spring boot·后端·spring
编程零零七2 小时前
Python数据分析工具(三):pymssql的用法
开发语言·前端·数据库·python·oracle·数据分析·pymssql
2401_858286113 小时前
52.【C语言】 字符函数和字符串函数(strcat函数)
c语言·开发语言
铁松溜达py3 小时前
编译器/工具链环境:GCC vs LLVM/Clang,MSVCRT vs UCRT
开发语言·网络
everyStudy3 小时前
JavaScript如何判断输入的是空格
开发语言·javascript·ecmascript
C-SDN花园GGbond5 小时前
【探索数据结构与算法】插入排序:原理、实现与分析(图文详解)
c语言·开发语言·数据结构·排序算法
迷迭所归处6 小时前
C++ —— 关于vector
开发语言·c++·算法
架构文摘JGWZ6 小时前
Java 23 的12 个新特性!!
java·开发语言·学习