C++速览之容器 string / vector

是什么?
在C++中,容器是用于存储和管理数据的 对象 对象 对象。容器提供了一种将多个元素组织在一起的方式,并提供了一系列操作来方便地访问、插入、删除和修改数据
C++标准库提供了许多不同类型的容器,每种容器都有其特定的功能和用途。

有什么用?
容器的用途包括但不限于以下几个方面:

存储和组织数据:容器可以存储一组相关的数据,并提供了适当的数据结构来组织这些数据。例如,数组容器可以存储一系列具有相同类型的元素,并提供通过索引访问元素的能力。

动态内存管理:一些容器(如std::vector和std::list)具有动态调整大小的能力,可以根据需要动态分配和释放内存,使得在运行时可以灵活地管理数据的大小。

提供数据访问和操作接口:容器提供了丰富的方法和操作符来访问和操作容器中的数据。通过这些接口,可以方便地对数据进行插入、删除、查找、排序等操作。

简化代码实现:使用容器可以简化代码的编写和维护。容器提供了封装好的数据结构和操作,避免了手动实现复杂的数据结构和算法,使代码更加简洁和可读性更高。

提供算法支持:C++标准库还提供了许多与容器一起使用的算法,如排序、查找、遍历等,这些算法可以方便地应用于容器中的数据。

通过选择合适的容器,可以根据具体的需求和场景来存储和管理数据,提高代码的效率和可维护性。不同的容器具有不同的特点和适用性,因此在选择容器时应根据数据访问、插入删除的需求以及空间和时间复杂度的考虑做出合理的选择。

1、String容器
std::string 是 C++ 标准库中提供的字符串容器,它用于存储和操作字符串。std::string 提供了许多字符串操作的方法,使得在 C++ 中处理字符串变得更加方便和高效。

std::string 提供了丰富的字符串操作功能,可以根据具体的需求来选择合适的方法来处理字符串。通过使用 std::string,可以在 C++ 中更方便地处理字符串数据。

#include <iostream>
#include <string>

int main() {
    // 创建一个空的 std::string 对象
    std::string str;
    //string str;  // 创建一个空字符串
	//string str1 = "Hello";//使用字符串字面值初始化
	//string str2("World");//使用字符串字面值或字符数组初始化
	//string str3(str2);//使用另一个字符串初始化


    // 使用赋值操作给 std::string 添加内容
    str = "Hello, ";
    str += "World!";

    // 访问和修改 std::string 的内容
    std::cout << "Length: " << str.length() << std::endl; // 输出: 13
    std::cout << "First character: " << str[0] << std::endl; // 输出: H

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

    // 在 std::string 中查找子串
    std::size_t found = str.find("World");
    if (found != std::string::npos) {
        std::cout << "Substring 'World' found at position: " << found << std::endl;
    } else {
        std::cout << "Substring 'World' not found" << std::endl;
    }

    return 0;
}

对象.函数()自己摸索

获取长度、连接字符串、访问和修改字符、搜索字符串、截取字符串、插入删除字符串、、、、、、

2、vector容器

std::vector 是 C++ 标准库中提供的动态数组容器,它能够存储和管理任意类型的元素。std::vector 提供了方便的方法来操作数组,使得在 C++ 中处理动态数组变得更加灵活和高效。

包含头文件:

#include <vector>
using namespace std;
#include <iostream>
#include <vector>

int main() {
    // 创建一个空的 std::vector 对象
    std::vector<int> vec;

    // 向 std::vector 添加元素
    vec.push_back(10);
    vec.push_back(20);
    vec.push_back(30);

    // 使用索引操作符访问 std::vector 的元素
    std::cout << "First element: " << vec[0] << std::endl;  // 输出: 10
    std::cout << "Second element: " << vec[1] << std::endl;  // 输出: 20

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

    // 在 std::vector 中插入元素
    vec.insert(vec.begin() + 1, 15);  // 在索引为1的位置插入元素15

    // 在 std::vector 中删除元素
    vec.erase(vec.begin() + 2);  // 删除索引为2的元素

    // 检查 std::vector 是否为空
    if (vec.empty()) {
        std::cout << "Vector is empty" << std::endl;
    } else {
        std::cout << "Vector is not empty" << std::endl;
    }

    // 访问 std::vector 中的元素数量
    std::cout << "Vector size: " << vec.size() << std::endl;

    return 0;
}

获取向量的大小、在向量末尾添加元素、迭代遍历向量、清空向量、动态调整向量的大小、排序向量中的元素

例子:

创建和初始化 std::vector 对象:
vector nums; // 创建一个空的整型向量
vector nums1 = {1, 2, 3}; // 使用初始化列表初始化向量
vector nums2(5, 0); // 创建包含5个元素,每个元素初始化为0的向量
vector nums3(nums1); // 使用另一个向量初始化向量

访问和修改元素:
int value = nums[0]; // 通过下标访问元素
nums[0] = 10; // 修改元素的值
int frontValue = nums.front(); // 获取首个元素的值
int backValue = nums.back(); // 获取最后一个元素的值

在指定位置插入和删除元素:
nums.insert(nums.begin() + 2, 8); // 在指定位置插入一个元素
nums.erase(nums.begin() + 1); // 删除指定位置的元素

迭代遍历向量:
// 普通的方式
for (int i = 0; i < nums.size(); i++) {
cout << nums[i] << " ";
}

// 新的方式
for (int num : nums) {
cout << num << " ";
}

动态调整向量的大小:
nums.resize(10); // 调整向量的大小为10,新增元素使用默认值
nums.resize(5, 0); // 调整向量的大小为5,新增元素初始化为0

排序向量中的元素:
sort(nums.begin(), nums.end()); // 对向量中的元素进行升序排序

3、其它常用容器

std::array
功能:固定大小的数组,提供高效的随机访问,大小在编译时确定。
头文件:#include

std::set
功能:有序集合,存储唯一值,支持快速的插入、查找和删除操作。
特点:元素按照严格的排序顺序进行存储,即每个元素都会根据其值进行排序。
头文件:#include

std::map
功能:关联数组(字典),按键值对存储和访问数据。
头文件:#include
/
std::map
功能:关联数组(字典),按键值对存储和访问数据。
头文件:#include

/
std::queue
功能:队列,遵循先进先出(FIFO)的原则,只能在队尾进行插入,在队头进行删除操作。
头文件:#include

这些是C++中另外几个常用的容器,它们提供了不同的数据结构和功能,可以根据具体的需求来选择适合的容器。熟悉这些容器的用法,能够更好地处理和管理数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

挥剑决浮云 -

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值