C++容器的常用操作

常见容器

      • `std::vector` 操作
      • `std::map` 操作
      • `std::set` 操作
      • `std::pair` 操作

std::vector 操作

  • 创建和初始化:
    std::vector<int> vec1; // 空 vector
    std::vector<int> vec2(5, 10); // 5 个元素,每个为 10
    std::vector<int> vec3 = {1, 2, 3};
    
  • 插入和删除:
    vec1.push_back(1);   // 末尾插入
    vec1.pop_back();     // 删除末尾元素
    vec1.insert(vec1.begin(), 5); // 插入到指定位置
    vec1.erase(vec1.begin()); // 删除指定位置
    vec1.clear(); // 清空
    
  • 访问元素:
    int val = vec1[0]; // 索引访问
    int val2 = vec1.at(1); // 使用 `at()`
    int front = vec1.front(); // 第一个元素
    int back = vec1.back();   // 最后一个元素
    
  • 大小和容量:
    int size = vec1.size();
    int capacity = vec1.capacity();
    vec1.resize(10); // 调整大小
    vec1.shrink_to_fit(); // 释放多余内存
    
  • 遍历:
    for (int val : vec1) { /* 遍历元素 */ }
    

std::map 操作

  • 创建和初始化:
    std::map<int, std::string> map1;
    std::map<int, std::string> map2 = {{1, "One"}, {2, "Two"}};
    
  • 插入和删除:
    map1[1] = "One"; // 插入或更新
    map1.insert({2, "Two"}); // 插入
    map1.emplace(3, "Three"); // 原地插入
    map1.erase(2); // 删除键为 2 的元素
    map1.clear(); // 清空
    
  • 访问元素:
    std::string val = map1[1]; // 使用 `[]`
    std::string val2 = map1.at(2); // 使用 `at()`
    
  • 查找:
    auto it = map1.find(2);
    bool exists = (map1.count(2) > 0);
    
  • 大小:
    int size = map1.size();
    bool isEmpty = map1.empty();
    

std::set 操作

  • 创建和初始化:
    std::set<int> set1;
    std::set<int> set2 = {1, 2, 3};
    
  • 插入和删除:
    set1.insert(1); // 插入
    set1.erase(2); // 删除
    set1.clear(); // 清空
    
  • 查找:
    auto it = set1.find(2);
    bool exists = (set1.count(2) > 0);
    
  • 大小:
    int size = set1.size();
    bool isEmpty = set1.empty();
    

std::pair 操作

  • 创建和初始化:
    std::pair<int, std::string> p1;
    std::pair<int, std::string> p2(1, "One");
    auto p3 = std::make_pair(2, "Two");
    
  • 访问元素:
    int first = p2.first;
    std::string second = p2.second;
    

以上是 vectormapsetpair 的常用操作的精简版。


具体示例代码:

1. Vector
#include <iostream>
#include <vector>
#include <algorithm>  // std::find 和 std::remove

int main() {
    // 初始化一个 vector
    std::vector<int> vec1 = {1, 2, 3, 4, 5};

    // 使用迭代器范围初始化另一个 vector(深拷贝)
    std::vector<int> vec2(vec1.begin(), vec1.end());

    // 插入元素
    vec2.push_back(6);  // 在末尾插入元素 6

    // 查找元素,使用迭代器来查找
    auto it = std::find(vec2.begin(), vec2.end(), 3);  // 查找元素 3
    if (it != vec2.end()) {
        vec2.erase(it);  // 删除找到的元素 3
    }

    // 直接删除特定元素
    vec2.erase(std::remove(vec2.begin(), vec2.end(), 2), vec2.end());  // 删除所有值为 2 的元素

    // 打印 vector 中的所有元素
    for (int val : vec2) {
        std::cout << val << " ";  // 输出: 1 4 5 6
    }
    return 0;
}

find(vec.begin(),vec.end(),value);
vec.erase(it);
- - - - - - - - - - - - -
2.Set
#include <iostream>
#include <set>

int main() {
    // 初始化一个 set
    std::set<int> s1 = {1, 2, 3, 4, 5}; 

    // 使用迭代器范围初始化另一个 set
    std::set<int> s2(s1.begin(), s1.end());

    // 插入元素
    s2.insert(6);  // 插入元素 6

    // 查找元素
    auto it = s2.find(3);  // 查找元素 3,返回迭代器
    if (it != s2.end()) {
        s2.erase(it);  // 删除找到的元素 3
    }

    // 直接删除特定元素
    s2.erase(2);  // 删除元素 2

    // 打印 set 中的所有元素
    for (int val : s2) {
        std::cout << val << " ";  // 输出: 1 4 5 6
    }

    return 0;
}
set.insert();
set.count();
set.erase();
- - - - - - - - - - - - -
3.Map
#include <iostream>
#include <map>

int main() {
    // 初始化一个 map
    std::map<int, std::string> m1 = {{1, "one"}, {2, "two"}, {3, "three"}};

    // 使用迭代器范围初始化另一个 map
    std::map<int, std::string> m2(m1.begin(), m1.end());

    // 插入元素
    m2.insert({4, "four"});  // 插入键值对 (4, "four")
    m2[5] = "five";  // 插入或更新键值对 (5, "five")

    // 查找元素
    auto it = m2.find(3);  // 查找键为 3 的元素
    if (it != m2.end()) {
        m2.erase(it);  // 删除键为 3 的元素
    }

    // 直接删除特定键
    m2.erase(2);  // 删除键为 2 的元素

    // 打印 map 中的所有键值对
    for (const auto& [key, value] : m2) {
        std::cout << key << ": " << value << " ";  // 输出: 1: one 4: four 5: five
    }

    return 0;
}
map.insert(make_pair(v1,v2));
map.erase(it);
auto it = map.find(key);
it->first; it->second;
- - - - - - - - - - - - -
4.Pair
#include <iostream>
#include <utility>  // std::pair

int main() {
    // 创建一个 pair
    std::pair<int, std::string> p1(1, "one");

    // 访问 pair 的元素
    std::cout << "First: " << p1.first << ", Second: " << p1.second << std::endl;  // 输出: First: 1, Second: one

    // 修改 pair 的元素
    p1.first = 2;
    p1.second = "two";

    std::cout << "First: " << p1.first << ", Second: " << p1.second << std::endl;  // 输出: First: 2, Second: two

    // 通过 make_pair 创建一个 pair
    auto p2 = std::make_pair(3, "three");

    std::cout << "First: " << p2.first << ", Second: " << p2.second << std::endl;  // 输出: First: 3, Second: three

    return 0;
}
make_pair(v1,v2);
pair.fisrt,pair.second;
总结
vector:支持动态大小和随机访问,适合需要连续存储的场景。
set:有序且唯一的元素集合,适合需要高效查找的场景。
pair:简单的二元数据结构,用于存储相关联的两个值。
map:有序键值对集合,适合快速查找和插入操作的场景。
我在写Leetcode时经常忘记这些容器的用法,其他的容器如list,stack,queue不是很常用,故仅总结出上面四个常用容器,以便速查。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值