// 2021.3.23(stl容器).cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <vector>
#include <list>
#include <map>
#include <string>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
vector<int> VecNum;
VecNum.push_back(5);
VecNum.push_back(6);
VecNum.push_back(6);
VecNum.push_back(7);
VecNum.push_back(9);
VecNum.push_back(11);
//容器名称[索引]
for (int i = 0; i < VecNum.size(); i++)
{
cout << VecNum[i] << endl;
}
//C++11新语法
//遍历输出容器中的数据
for (int nValue : VecNum)
{
cout << nValue << endl;
}
//修改容器中的数据要用引用&
for (int& nValue : VecNum)
{
nValue = 100; //将容器中的数据均改为100
cout << nValue << endl;
}
//vector<int>::iterator 是迭代器类型
vector<int>::iterator iter = VecNum.begin() + 3;//返回容器第3个元素的迭代器
VecNum.erase(VecNum.begin() + 2); //移除第2个元素
VecNum.end(); //返回容器末尾的迭代器,标志容器的结束
cout << *iter << endl;
//通过迭代器遍历容器
for (vector<int>::iterator iter = VecNum.begin(); iter != VecNum.end(); ++iter)
{
cout << *iter << endl;
}
for (vector<int>::const_iterator iter = VecNum.begin(); iter != VecNum.end(); ) //常迭代器不可被修改
{
if (6 == *iter)
{
//erase返回指向下一个元素的迭代器
iter = VecNum.erase(iter);
//*iter = 100;
}
else{
++iter;
}
}
VecNum.clear(); //清空数据
VecNum.pop_back(); //从后往前弹出
cout << VecNum.at(2) << endl; //输出第2个
cout << VecNum.back() << endl; //输出最后一个
vector<int>::const_iterator iter = VecNum.cbegin();//返回第一个元素的常迭代器
VecNum.cend();
cout << "-------------------------------------------------- list容器 -------------------------------------------------------------";
//定义
// list<类型> 容器名称;
list<int> listNum;
listNum.push_back(5);
listNum.push_back(6);
listNum.push_back(6);
listNum.push_back(7);
listNum.push_back(8);
listNum.push_back(9);
list<int>::iterator iter = listNum.begin();
list<int>::const_iterator iter = listNum.cbegin(); //返回第一个元素的常迭代器
cout << *iter << endl;
//重要★★★
for (list<int>::iterator iter = listNum.begin(); iter != listNum.end();)
{
if (6 == *iter)
{
iter = listNum.erase(iter); //返回移除后的迭代器
}
else{
++iter;
}
}
listNum.pop_back(); //弹出
listNum.end();
listNum.back(); //返回最后一个元素的值
listNum.empty(); //判空
listNum.size(); //个数
listNum.clear(); //清空
listNum.front(); //返回第一个元素的值
//遍历输出
for (list<int>::iterator iter = listNum.begin(); iter != listNum.end(); ++iter)
{
cout << *iter << endl;
}
cout << "-------------------------------------------------- map容器(键 值) -------------------------------------------------------------";
// 键 值
//map<键的类型 , 值的类型> 容器名称;
//键的类型(一般类型 int ,string 等) ;值的类型(任意类型:包括结构体类型等)
map<int, string> mapName;
mapName[5] = "A老师"; //数字5是键,字符串"A老师"是值
mapName[8] = "B老师";
mapName[10] = "C老师";
mapName[11] = "D老师";
mapName.insert(pair<int, string>(12, "E老师")); //插入新的键值对
mapName[5] = "F老师"; //修改键为5的数据,因为键是唯一的
cout << mapName[12] << endl;
cout << mapName.at(12) << endl;
map<int, string>::iterator iter1 = mapName.begin();
//两种访问键值的写法
cout << iter1->first << ":" << iter1->second << endl; //first指的是键,second指的是值
cout << (*iter1).first << ":" << (*iter1).second << endl;
//移除值为 "B老师" 的键值对
for (map<int, string>::iterator iter = mapName.begin(); iter != mapName.end();)
{
cout << iter->first << ":" << iter->second << endl;
if (iter->second == "B老师")
{
iter = mapName.erase(iter);
}
else{
++iter;
}
}
//遍历输出
for (map<int, string>::iterator iter = mapName.begin(); iter != mapName.end(); ++iter)
{
cout << iter->first << ":" << iter->second << endl;
}
mapName.clear();
mapName.size();
//找到的话返回它的迭代器,如果没有找到返回mapName.end()的迭代器
map<int, string>::iterator iter2 = mapName.find(5);
if (iter2 != mapName.end())
{
cout << iter2->first << ":" << iter2->second << endl;
}
system("pause");
return 0;
}
【C++知识点】容器:list容器、map容器
最新推荐文章于 2023-08-30 21:07:23 发布
本文详细探讨了C++中的两种重要容器——list和map。list容器主要关注其双链表结构,讨论了插入、删除和迭代器操作的效率。map容器则讲解了红黑树实现的映射关系,以及如何高效地进行查找、插入和更新键值对。通过实例代码,读者将更好地掌握这两种容器在实际编程中的应用。
摘要由CSDN通过智能技术生成