• C++
  • vector、array、tuple、list

  • @ 2024-7-24 23:21:03

在C++14标准中,vector、array、tuple、list这四种容器的基本用法与在C++11及更早版本中相似,但C++14引入了一些新特性,如泛型lambda表达式和返回类型推导等,这些特性可以在使用这些容器时提供额外的便利。以下是对这四种容器在C++14中的详细教程:

  1. vector 定义与特点 定义:vector是C++标准模板库(STL)中的一个序列容器,用于存储同一类型的元素序列。它是一个动态数组,可以动态地增加或减少元素。 特点:支持随机访问,即在常数时间内访问任意位置的元素。在尾部插入或删除元素时效率较高,但在中间或头部插入或删除元素时效率较低。 基本用法 包含头文件:#include 声明:std::vector vec; // 以存储int类型元素为例 插入元素: vec.push_back(10); // 在尾部插入元素10 使用insert成员函数在指定位置插入元素 访问元素: int value = vec[0]; // 通过下标访问第1个元素 使用迭代器访问 删除元素: vec.erase(vec.begin() + 1); // 删除第2个元素 vec.pop_back(); // 删除最后一个元素 遍历: 使用迭代器或基于范围的for循环(C++11及以后版本)遍历 C++14特性 泛型lambda表达式:可以在lambda表达式中直接使用auto关键字作为参数类型,使代码更简洁。 返回类型推导:在lambda表达式中,如果函数体只有一条返回语句,编译器可以自动推导返回类型,无需显式指定。
  2. array 定义与特点 定义:array是C++11标准中引入的一个固定大小的数组容器。 特点:大小在编译时确定,不可改变。支持随机访问,但比原生数组更安全,因为可以检查越界访问。 基本用法 包含头文件:#include 声明与初始化: std::array<int, 5> arr = {1, 2, 3, 4, 5}; // 声明并初始化 访问元素: int value = arr[0]; // 通过下标访问 int value = arr.at(0); // 通过at函数访问(会进行越界检查) 遍历: 使用基于范围的for循环遍历 C++14特性 与C++11用法相似,C++14没有为array引入新的直接相关特性,但泛型lambda和返回类型推导等特性可以在处理array时使用。
  3. tuple 定义与特点 定义:tuple是C++11标准中引入的一个固定大小的元组,用于存储不同类型的值。 特点:可以存储任意数量的不同类型的值。通过索引或std::get函数访问元素。C++17引入了结构化绑定,但C++14中尚未提供。 基本用法 包含头文件:#include 声明与初始化: std::tuple<int, double, std::string> t(1, 2.3, "hello"); 使用std::make_tuple:auto t = std::make_tuple(1, 2.3, "hello"); 访问元素: 使用std::get函数:int i = std::get<0>(t); 遍历: 遍历tuple比较复杂,通常需要自定义函数或使用第三方库。C++14中没有提供直接遍历tuple的简便方法。 C++14特性 与处理vector和array类似,C++14的泛型lambda和返回类型推导等特性可以在处理tuple时使用,尽管它们不直接改变tuple的用法。
  4. list 定义与特点 定义:list是C++标准模板库中的一个双向链表容器。 特点:可以在常数时间内(O(1))在任意位置插入或删除元素。不支持随机访问,只能通过迭代器访问元素。 基本用法 包含头文件:#include 声明:std::list lst; 插入元素: lst.push_back(10); // 在尾部插入 lst.push_front(20); // 在头部插入 使用insert成员函数在指定位置插入元素 访问元素: int frontValue = lst.front(); // 访问第一个元素 int backValue = lst.back(); // 访问最后一个元素 删除元素: lst.pop_back(); // 删除最后一个元素 lst.pop_front(); // 删除第一个元素 使用erase函数删除指定位置的元素 遍历: 使用迭代器或基于范围的for循环(C++11及以后版本)遍历 C++14特性 与处理其他容器类似,C++14的泛型lambda和返回类型推导等特性可以在处理list时使用,尽管它们不直接改变list的基本用法。 综上所述,C++14标准中的vector、array、tuple、list在基本用法上与之前的版本相似,但C++14引入的一些新特性(如泛型lambda表达式和返回类型推导)可以在使用这些容器时提供额外的便利。

1 条评论

  • @ 2024-8-4 16:53:34
    枚举法
    暴力枚举、穷举
    把所有的可能性枚举一遍
    用扫描的技术把解题空间全部枚举一遍
    基本的处理步骤
    1、确定枚举变量有几个,分别是什么?
    枚举变量应该有两个,分别是第一个元素和第二个元素
    2、确定枚举变量的范围
    第一个元素 i:1~n-1
    第一个元素 j:i+1~n
    3、确定筛选条件
    4、输出答案
    1809	两倍
    1978	生理周期
    2722	和数
    2723	因子问题
    3526	最简真分数
    6184	找和为K的两个元素
    7647	余数相同问题
    7650	不定方程求解
    字符串题做一下
    
    • 1