C++中的各种容器的使用方法汇总

C++中的各种容器的使用方法汇总

本攻略介绍了C++中的常用容器的使用方法,包括:数组,向量,列表,栈,队列,映射和集合等。

数组

数组是C++中最基本的容器,它存储固定大小的相同类型元素。数组的大小在声明时就已经指定,而且不能随意改变。

以下是数组的基本定义和初始化方法:

int arr[5];    //定义一个数组,包含五个整数元素
int arr[5] = {1, 2, 3, 4, 5};    //定义一个包含五个整数元素的数组,并初始化元素

向量

向量是一个动态数组,允许在运行时添加、删除元素。为了使用向量,需要包含头文件<vector>

以下是向量的基本定义和初始化方法:

vector<int> vec;    //定义一个空向量
vector<int> vec(5);    //定义一个包含五个元素的向量
vector<int> vec{1, 2, 3, 4, 5};    //定义一个包含五个元素的向量,并初始化元素

向向量添加元素的方法如下:

vec.push_back(10);    //向向量中添加一个整数10

列表

列表是一个双向链表,允许在任何位置添加和删除元素。为了使用列表,需要包含头文件<list>

以下是列表的基本定义和初始化方法:

list<int> lst;    //定义一个空列表
list<int> lst{1, 2, 3, 4, 5};    //定义一个包含五个元素的列表,并初始化元素

向列表添加元素的方法如下:

lst.push_back(10);    //向列表尾部添加一个整数10
lst.push_front(9);    //向列表头部添加一个整数9

栈是一个后进先出(LIFO)的容器。为了使用栈,需要包含头文件<stack>

以下是栈的基本定义和初始化方法:

stack<int> stk;    //定义一个空栈

向栈添加和删除元素的方法如下:

//向栈中添加元素
stk.push(10);    
stk.push(20);   

//从栈中删除元素
stk.pop();    

队列

队列是一个先进先出(FIFO)的容器。为了使用队列,需要包含头文件<queue>

以下是队列的基本定义和初始化方法:

queue<int> que;    //定义一个空队列

向队列添加和删除元素的方法如下:

//向队列中添加元素
que.push(10);    
que.push(20);   

//从队列中删除元素
que.pop();    

映射

映射是一种关联数组,将一个键与一个值相关联。为了使用映射,需要包含头文件<map>

以下是映射的基本定义和初始化方法:

map<string, int> mp;    //定义一个空映射

向映射添加、查找和删除元素的方法如下:

//向映射中添加元素
mp["apple"] = 10;
mp["orange"] = 20;

//从映射中查找元素
if (mp.find("apple") != mp.end())
{
    cout << "Found apple: " << mp["apple"] << endl;
}

//从映射中删除元素
mp.erase("apple");

集合

集合是一组唯一的元素。集合不允许重复元素。为了使用集合,需要包含头文件<set>

以下是集合的基本定义和初始化方法:

set<int> st;    //定义一个空集合

向集合添加、查找和删除元素的方法如下:

//向集合中添加元素
st.insert(10);
st.insert(20);

//从集合中查找元素
if (st.find(10) != st.end())
{
    cout << "Found 10" << endl;
}

//从集合中删除元素
st.erase(10);

示例

向量示例

以下示例展示了如何使用向量实现一个可动态添加和删除元素的整数数组:

#include <iostream>
#include <vector>

using namespace std;

int main()
{
    //定义一个向量,用于存储整数
    vector<int> myvector;

    //向向量中添加元素
    for (int i=1; i<=5; i++) myvector.push_back(i*10);

    //输出向量中的元素
    cout << "myvector contains:";
    for (auto it = myvector.begin(); it != myvector.end(); ++it)
        cout << ' ' << *it;
    cout << '\n';

    //从向量中删除最后一个元素
    myvector.pop_back();

    //输出删除后向量中的元素
    cout << "myvector contains:";
    for (auto it = myvector.begin(); it != myvector.end(); ++it)
        cout << ' ' << *it;
    cout << '\n';

    return 0;
}

输出结果为:

myvector contains: 10 20 30 40 50
myvector contains: 10 20 30 40

映射示例

以下示例展示了如何使用映射实现一个字符串计数程序,该程序接受用户输入的字符串,并计算每个单词出现的次数:

#include <iostream>
#include <map>
#include <string>
#include <cctype>

using namespace std;

int main()
{
    //定义一个映射,用于存储单词出现的次数
    map<string,int> wordcount;

    //接受用户输入的字符串
    string line;
    getline(cin, line);

    //遍历字符串中的每个单词
    string word;
    for (auto c : line)
    {
        if (isalpha(c)) //遇到字母,将其添加到当前单词中
        {
            word += tolower(c);
        }
        else if (word != "") //遇到非字母字符,并且当前单词不为空,将其添加到映射中
        {
            if (wordcount.find(word) == wordcount.end())
            {
                wordcount[word] = 1;
            }
            else
            {
                wordcount[word] += 1;
            }
            word = "";
        }
    }
    //处理字符串末尾的单词
    if (wordcount.find(word) == wordcount.end())
    {
        wordcount[word] = 1;
    }
    else
    {
        wordcount[word] += 1;
    }

    //输出单词计数结果
    for (auto it : wordcount)
    {
        cout << it.first << " : " << it.second << endl;
    }

    return 0;
}

假设用户输入的字符串是hello world how are you world,则输出结果为:

are : 1
hello : 1
how : 1
world : 2
you : 1

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++中的各种容器的使用方法汇总 - Python技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • 学习二维动态数组指针做矩阵运算的方法

    学习二维动态数组指针做矩阵运算的方法,需要掌握以下几个方面: 动态数组的申请和释放 二维数组指针的使用 矩阵的创建、初始化和运算 下面分步骤来详细讲解: 1. 动态数组的申请和释放 动态数组是指在程序运行时动态分配内存的数组,其大小可以在运行时根据需要进行调整。在C语言中,可以使用malloc函数来动态申请一维数组,使用calloc函数来申请二维数组。具体实…

    other 2023年6月26日
    00
  • java判断class子类或父类的实例方法

    要判断Java中的一个实例方法属于其父类还是子类,可以通过利用Java反射API中的getDeclaredMethod()方法实现。 首先,在Java中,一个对象的所属类可以通过instanceof关键字来判断。但是,如果需要定位该实例方法是被哪个类所声明的,就需要使用Java反射API了。要使用Java反射API获取方法,需要使用Class类的 getDe…

    other 2023年6月26日
    00
  • TabLayout+ViewPager实现切页的示例代码

    TabLayout+ViewPager实现切页的示例代码攻略 1. 添加依赖库 首先,我们需要在项目的build.gradle文件中添加TabLayout和ViewPager的依赖库。在dependencies块中添加以下代码: implementation ‘com.google.android.material:material:1.4.0’ 2. 创建…

    other 2023年8月25日
    00
  • signalR制作微信墙 开源

    signalR制作微信墙 开源 微信墙是一种将微信公众号与现场互动结合的方式,可以用于各种活动、会议等场合。实现微信墙的技术比较多,其中signalR是一种较为流行的实现方式之一。 signalR是什么 signalR是微软公司推出的一种实时通信库,以简单易用、性能卓越、全平台支持等优势,被越来越多的开发者所使用。实现signalR的目标是实现服务端与客户端…

    其他 2023年3月28日
    00
  • JavaScript操作数组的常用方法总结

    关于“JavaScript操作数组的常用方法总结”,我可以提供以下攻略: 1. 常用方法概述 JavaScript是一种弱类型的编程语言,其内置了大量操作数组的方法。下面给出一些常用的方法概述: push、pop push方法在数组的末尾添加一个元素,返回新数组的长度,示例代码如下: const arr = [1, 2]; arr.push(3); cons…

    other 2023年6月25日
    00
  • GTA5 PC版修改时间存档没了怎么办 修改时间存档丢失解决方法介绍

    GTA5 PC版修改时间存档没了怎么办 如果在GTA5 PC版中修改了时间存档,但后来发现存档不见了怎么办?下面将介绍修改时间存档丢失的解决方法。 1. 恢复Recycle Bin中的文件 首先,检查是否将时间存档文件误删或放到了回收站中。如果是这种情况,可以轻松地将它们恢复到原来的位置。 具体操作步骤如下: 打开计算机桌面上的回收站。 在回收站中寻找时间存…

    other 2023年6月27日
    00
  • 如何解决ASP.NET新增时多字段取值的问题

    问题描述: 在ASP.NET中添加新纪录时,需要从前端获取多个字段的数值,但是在处理时遇到了问题,无法从前端同时获取多个字段的数值,需要解决这个问题。 解决方案: 1.前端传递JSON数据 前端通过JSON格式的数据将需要添加的多个字段的数值传递给后端,后端进行反序列化并取出对应字段的值进行处理。 示例代码: 前端代码: var data = { field…

    other 2023年6月25日
    00
  • 淘宝直播严选精选佣金结算优先级规则

    淘宝直播严选精选佣金结算优先级规则攻略 1. 背景介绍 在淘宝直播中,严选精选是一种特殊类型的佣金结算方式。严选精选的商品通常由淘宝直播的作者进行推荐,并且具有更高的佣金比例。然而,在进行严选精选佣金结算时,存在一些优先级规则,本攻略将详细讲解这些规则。 2. 严选精选佣金结算优先级规则 2.1. 直播间内商品推荐顺序优先级 在同一个直播间内,存在多个严选精…

    other 2023年6月28日
    00
合作推广
合作推广
分享本页
返回顶部