首页 > 编程语言 >C++的数据类型----标准库类型(std::vector容器/std::list容器/std::map容器)的实例讲解

C++的数据类型----标准库类型(std::vector容器/std::list容器/std::map容器)的实例讲解

时间:2024-09-10 13:54:37浏览次数:14  
标签:std 容器 cout 数据类型 元素 list vector 字符串

目录

1.字符串 (std::string): 用于处理文本字符串。

下面是一个 C++ 中字符串的示例程序,展示了如何使用标准库中的 std::string 类进行字符串的初始化、操作和比较。

#include <iostream>
#include <string>

int main() {
    // 字符串初始化
    std::string str1 = "Hello";
    std::string str2 = "World";

    // 输出字符串
    std::cout << "字符串1: " << str1 << std::endl;
    std::cout << "字符串2: " << str2 << std::endl;

    // 字符串连接
    std::string combined = str1 + " " + str2;
    std::cout << "连接后的字符串: " << combined << std::endl;

    // 字符串长度
    std::cout << "字符串1的长度: " << str1.length() << std::endl;
    std::cout << "字符串2的长度: " << str2.length() << std::endl;

    // 字符串比较
    if (str1 == str2) {
        std::cout << "字符串1和字符串2相等。" << std::endl;
    } else {
        std::cout << "字符串1和字符串2不相等。" << std::endl;
    }

    // 查找子字符串
    std::string substring = "lo";
    if (str1.find(substring) != std::string::npos) {
        std::cout << "字符串1包含子字符串: " << substring << std::endl;
    } else {
        std::cout << "字符串1不包含子字符串: " << substring << std::endl;
    }

    // 修改字符串
    str1.replace(1, 3, "ell"); // 将 "e" 替换为 "ell"
    std::cout << "修改后的字符串1: " << str1 << std::endl;

    // 字符串转为C风格字符串
    const char* cstr = str1.c_str();
    std::cout << "字符串1的C风格表示: " << cstr << std::endl;

    return 0;
}

说明
字符串初始化:
使用 std::string 类型定义和初始化字符串 str1 和 str2。
输出字符串:
使用 std::cout 输出字符串的内容。
字符串连接:
使用 + 操作符将两个字符串连接在一起,形成一个新字符串 combined。
字符串长度:
使用 length() 方法获取字符串的长度并输出。
字符串比较:
使用 == 运算符比较两个字符串的内容,并输出比较结果。
查找子字符串:
使用 find() 方法查找 str1 中是否包含子字符串 lo,并输出结果。
修改字符串:
使用 replace() 方法修改字符串的部分内容,将字符替换为其他字符串。
C 风格字符串:
使用 c_str() 方法将 std::string 转换为 C 风格字符串(字符数组),并输出其内容。

2.容器: 如 std::vector、std::list、std::map 等,用于存储和管理数据集合

2.1 std::vector容器

下面是一个 C++ 中使用 std::vector 的示例程序,展示了如何定义、初始化、添加、访问和遍历 std::vector。

#include <iostream>
#include <vector>

int main() {
    // 定义一个整数类型的 vector
    std::vector<int> numbers;

    // 向 vector 中添加元素
    numbers.push_back(10);
    numbers.push_back(20);
    numbers.push_back(30);
    numbers.push_back(40);
    numbers.push_back(50);

    // 输出 vector 的大小
    std::cout << "vector 的大小: " << numbers.size() << std::endl;

    // 访问 vector 中的元素
    std::cout << "vector 中的元素: ";
    for (size_t i = 0; i < numbers.size(); ++i) {
        std::cout << numbers[i] << " "; // 使用下标访问
    }
    std::cout << std::endl;

    // 使用迭代器遍历 vector
    std::cout << "使用迭代器遍历 vector: ";
    for (std::vector<int>::iterator it = numbers.begin(); it != numbers.end(); ++it) {
        std::cout << *it << " "; // 通过迭代器访问
    }
    std::cout << std::endl;

    // 删除最后一个元素
    numbers.pop_back();
    std::cout << "删除最后一个元素后,vector 的大小: " << numbers.size() << std::endl;

    // 清空 vector
    numbers.clear();
    std::cout << "清空后,vector 的大小: " << numbers.size() << std::endl;

    // 重新添加元素
    numbers.push_back(100);
    numbers.push_back(200);
    
    std::cout << "重新添加元素后,vector 中的元素: ";
    for (const int &num : numbers) {
        std::cout << num << " "; // 使用范围 for 循环
    }
    std::cout << std::endl;

    return 0;
}

说明
定义和初始化:
使用 std::vector 定义一个整数类型的动态数组 numbers。
添加元素:
使用 push_back() 方法向 vector 中添加元素。
输出大小:
使用 size() 方法获取 vector 的当前大小,并输出。
访问元素:
使用下标访问 vector 中的元素,并遍历输出。
使用迭代器遍历:
使用迭代器遍历 vector,并输出每个元素的值。
删除元素:
使用 pop_back() 方法删除 vector 中的最后一个元素,并输出新大小。
清空 vector:
使用 clear() 方法清空 vector 中的所有元素,并再次输出大小。
重新添加元素:
重新向 vector 中添加元素,并使用范围 for 循环输出所有元素。

2.2 std::list容器

下面是一个 C++ 中使用 std::list 的示例程序,展示了如何定义、初始化、添加、访问和遍历 std::list。

#include <iostream>
#include <list>

int main() {
    // 定义一个整数类型的 list
    std::list<int> numbers;

    // 向 list 中添加元素
    numbers.push_back(10);
    numbers.push_back(20);
    numbers.push_back(30);
    numbers.push_back(40);
    numbers.push_back(50);

    // 输出 list 的大小
    std::cout << "list 的大小: " << numbers.size() << std::endl;

    // 输出 list 中的元素
    std::cout << "list 中的元素: ";
    for (const int& num : numbers) {
        std::cout << num << " "; // 使用范围 for 循环
    }
    std::cout << std::endl;

    // 在 list 的前面插入一个元素
    numbers.push_front(5);
    std::cout << "插入后,list 中的元素: ";
    for (const int& num : numbers) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    // 删除 list 中的一个元素
    numbers.remove(30);
    std::cout << "删除 30 后,list 中的元素: ";
    for (const int& num : numbers) {
        std::cout << num << " ";
    }
    std::cout << std::endl;

    // 访问第一个和最后一个元素
    std::cout << "第一个元素: " << numbers.front() << std::endl;
    std::cout << "最后一个元素: " << numbers.back() << std::endl;

    // 清空 list
    numbers.clear();
    std::cout << "清空后,list 的大小: " << numbers.size() << std::endl;

    return 0;
}

说明
定义和初始化:
使用 std::list 定义一个整数类型的双向链表 numbers。
添加元素:
使用 push_back() 方法向 list 的末尾添加元素。
使用 push_front() 方法向 list 的前面添加元素。
输出大小:
使用 size() 方法获取 list 的当前大小,并输出。
输出元素:
使用范围 for 循环遍历 list 中的元素,并输出它们的值。
删除元素:
使用 remove() 方法删除 list 中指定的元素(如 30),并输出新的元素列表。
访问元素:
使用 front() 方法获取 list 的第一个元素,使用 back() 方法获取最后一个元素,并输出。
清空 list:
使用 clear() 方法清空 list 中的所有元素,并输出清空后的大小。

2.3 std::map容器

下面是一个 C++ 中使用 std::map 的示例程序,展示了如何定义、初始化、插入、访问和遍历 std::map。

#include <iostream>
#include <map>

int main() {
    // 定义一个整数到字符串的 map
    std::map<int, std::string> studentMap;

    // 向 map 中插入元素
    studentMap[101] = "Alice";
    studentMap[102] = "Bob";
    studentMap[103] = "Charlie";
    studentMap[104] = "Diana";

    // 输出 map 的大小
    std::cout << "map 的大小: " << studentMap.size() << std::endl;

    // 遍历 map 中的元素
    std::cout << "学生 ID 和姓名: " << std::endl;
    for (const auto& pair : studentMap) {
        std::cout << "ID: " << pair.first << ", 姓名: " << pair.second << std::endl;
    }

    // 访问特定的元素
    int idToFind = 102;
    if (studentMap.find(idToFind) != studentMap.end()) {
        std::cout << "找到学生 ID " << idToFind << ": " << studentMap[idToFind] << std::endl;
    } else {
        std::cout << "学生 ID " << idToFind << " 不存在。" << std::endl;
    }

    // 删除一个元素
    studentMap.erase(103);
    std::cout << "删除 ID 103 后的学生列表: " << std::endl;
    for (const auto& pair : studentMap) {
        std::cout << "ID: " << pair.first << ", 姓名: " << pair.second << std::endl;
    }

    // 清空 map
    studentMap.clear();
    std::cout << "清空后,map 的大小: " << studentMap.size() << std::endl;

    return 0;
}

说明
定义和初始化:
使用 std::map<int, std::string> 定义一个从学生 ID(整数)到学生姓名(字符串)的映射。
插入元素:
使用下标操作符向 map 中插入元素,定义学生 ID 和姓名。
输出大小:
使用 size() 方法获取 map 的当前大小,并输出。
遍历元素:
使用范围 for 循环遍历 map 中的所有键值对,并输出它们的内容。
访问特定元素:
使用 find() 方法查找特定的学生 ID,并输出对应的姓名。如果 ID 不存在,输出相应的提示。
删除元素:
使用 erase() 方法删除指定的学生 ID,随后遍历并输出剩余的学生信息。
清空 map:
使用 clear() 方法清空 map 中的所有元素,并输出清空后的大小。

标签:std,容器,cout,数据类型,元素,list,vector,字符串
From: https://blog.csdn.net/weixin_41065810/article/details/142014824

相关文章

  • Docker 容器与数据卷
    上一篇启动registry的时候,用了-v和--privileged参数,本文就讲解这两个参数的含义‍privileged参数在CentOS7中,安全模块会比之前系统版本加强,不安全的行为会先禁止,而目录挂载的情况被默认为不安全的行为,因此我们在启动私服的时候,可能会被禁止,报错cannotopendirectory......
  • docker 容器的常用命令
      docker容器的常用命令 一、基础概念 1、容器 (1)容器狭义的讲就是盛放东西的器皿,比如锅、碗、瓢、盆,再比如数组、字符串等,Java集合框架中列表、集、散列映射等也是容纳数据的容器。 (2)容器广义上讲是包含容器管理器、实际盛放数据的器皿在内的软件,比如docker就是一款......
  • 本地服务调用容器(docker)注册至nacos&dubbo服务
    1.问题背景开发人员通过本地启动服务注册到nacos,调用通过容器注册到nacos的服务失败; 2.问题解决  step1:指定网络模式为主机模式(network=host)  step2:    增加暴露端口(port=xxx)  step3:    指定dubbo服务注册到注册中心的ip+port(du......
  • flask-docker更新(mysql更新为容器)
    前言之前用docker编写了一个flask的简单demo,但是里面的mysql用的本地的,当时是自己偷懒用了本地的,现在空余时间重新处理了mysql容器重新更新一下一、docker-compose.yml示例version:'3'services:flask:build:context:./appcontainer_name:flask......
  • Python-stdlib bisect
    官方文档:bisect---数组二分算法bisect_left(a,x,lo=0,hi=len(a),*,key=None)在a中找到x合适的插入点以维持有序。参数lo和hi可以被用于确定需要考虑的子集;默认情况下整个列表都会被使用。如果x已经在a里存在,那么插入点会在已存在元素之前(也就是左边)。如果a......
  • Docker必备命令大全:从安装到多容器管理
    浪浪云活动链接:https://langlangy.cn/?i8afa52文章目录安装Docker在Ubuntu上安装Docker在CentOS上安装DockerDocker常用命令1.检查Docker版本2.管理Docker容器2.1拉取镜像2.2列出本地镜像2.3运行容器2.4列出运行中的容器2.5停止容器2.6启动容器......
  • 【C++基础概念理解——std::unique_ptr如何管理动态分配的对象的生命周期?】
    文章目录问题解释问题std::unique_ptr用于管理动态分配的对象的生命周期,那么这种智能指针怎么实现管理生命周期的呢?解释用于确保对象不再使用时自动释放,从而避免内存泄漏。std::unique_ptr独占管理对象的所有权,同一时间只能有一个std::unique_ptr指向该对象。确保......
  • C++: set与map容器的介绍与使用
    本文索引前言1.二叉搜索树1.1概念1.2二叉搜索树操作1.2.1查找与插入1.2.2删除1.2.3二叉搜索树实现代码2.树形结构的关联式容器2.1set的介绍与使用2.1.1set的构造函数2.1.2set的迭代器2.1.3set的容量2.1.4set的修改操作2.2map的介绍与使用2.2.1map的构造......
  • redis 常用数据类型和常用命令
    一、数据类型在Redis中命令不区分大小写,但key是区分大小写的,帮助命令如下:helpcommandhelp@group解释:group是指数据类型,比如string、hash,这样就会把关于字符串或者是hash数据类型的所有命令列出来redis有十大数据类型,本文介绍常用的六种。1.1、string在一个字符串中存储......
  • 极狐GitLab 新一代容器镜像仓库正式上线啦!
    从极狐GitLab17.3开始,私有化部署实例也可以使用新一代容器镜像仓库啦!新一代容器镜像仓库具有更高效的零宕机垃圾收集功能和其他优势。从去年开始,极狐GitLab就启动了重构容器镜像仓库的计划,用以构建具有更强功能的镜像仓库,比如零宕机垃圾收集。自从将此功能成功迁移到极狐GitL......