记录C++ 12

序列式容器

将一组具有相同类型的元素以严格的线性形式组织起来,每个元素都要固定的位置

向量(vector)

本质上是动态数组,随机存取任何元素都能在常数事件完成,在尾端增删性能高
cpp 复制代码
#include <iostream>
#include <vector>
#include <string >

using namespace std;
int main()
{
    vector<int> a; //创建一个向量存储容器 int
    for(int i=0;i<10;++i)//push_back在数组最后添加十个数据
    {
        a.push_back(i);
        cout <<a[i]<<" ";
    }
    for(int i=0;i<5;++i)
    {
        a.pop_back();//去掉数组最后5个数据
    }
    cout <<"\n"<<endl;

    for(unsigned int i=0;i<a.sizel();++i)//size()容器中实际数据个数,打印数组内所有数据
    {
       cout <<a[i]<<" ";
    }
    return 0;
}

列表(List)

本质上是双向循环链表,在任何位置增删元素都能在常数时间完成,但随机访问偏慢

双端队列(deque)

本质是动态数组,随机存取任何元素都能在常数时间完成,性能仅次于vector,在2端增删元素具有较好性能

关联式容器

查找数据时具有非常好的性能,查找和检索的事件通常以平衡二叉树的方式实现

集合(set)与多重集合(multiset)

set容器内元素会被自动排序默认升序,无法使用迭代器去修改set元素,但可以插入或删除,set不允许数据重复,而multiset允许数据重复

映射(map)与多重映射(multimap)

map提供的是一种键值对容器,里面的数据都是成对出现的,每一对中的第一个值称为关键字key,每个关键字只能在map里面出现一次,第二个值成为该关键字的对应值
multimap与map唯一区别就是支持键值key重复,导致map支持\[\]运算符,而multimap不支持
cpp 复制代码
#include <iostream>
#include <map>
#include <string>
 
using namespace std;
int main()
{
    map<int,string>students={{1,"zhangsan"},{2,"lisi"}};//初始化用{}赋值

    students.insert(pair<int,string>(3,"wangwu"));//用insert函数插入pair数据

    students.insert(map<int,string>::value_type(4,"laoliu"));//用insert函数插入value_type数据

    map<int,string>::iterator iter;//使用迭代器遍历map;打印所有数据
    for(iter =students.begin();iter !=students.end();++iter)
    {
        cout <<iter->first <<" "<<iter->second <<endl;
    }
    return 0;
}

迭代器

迭代器是一种检查容器类元素并遍历元素的数据类型,迭代器核心作用使算法独立于容器类型,每种容器都定义了自己的迭代器类型,都定义了一对名为begin和end的函数用于迭代器返回,迭代器分正向迭代器(iterator)和反向迭代器(reverse_iterator)

迭代器的类型

输入迭代器:对容器连续遍历2次,不保证顺序一致,不保证遍历中途,先前的值仍然可用,为单向迭代器
输出迭代器:只能用于修改容器内数据,不能读取数据,主要用于单通行只写算法
正向迭代器:可用++遍历容器,连续遍历2次保证顺序一致,遍历中途可对先前值访问,并且能够获取数据和修改数据
双向迭代器:在正向迭代器基础上增加--操作可以倒退
随机访问迭代器:可以调到容器任何元素上进行操作,还支持><的比较

代表性的三个算法函数

for_each():前2个参数为定义容器中区间的迭代器,第三个参数为函数对象,将区间内的元素依次传入函数中执行但不能修改容器内容
random():前2个参数为定义容器中区间的迭代器,要求容器进行随机访问,随机排列该区间的元素
sort():前2个参数为定义容器中区间的迭代器,第三个函数为函数对象,传递排序方式,默认为升序,要求容器支持随机访问,将区间内元素按照函数对象的要求排序

函数对象

包括函数名,指向函数的指针重载了()运算符的类对象,分为生成器:不用参数就可以调用的函数符
一元函数:用一个参数就可以调用的函数,返回值为bool类型成为谓词
二元函数:用二个参数就可用调用的函数,返回值为bool类型为二元谓词
相关推荐
此陆昭昭1 小时前
qt,使用qml写一个简单的界面
c++·qt
丰锋ff1 小时前
基于 Qt 的智能门禁系统(三)
开发语言·qt
沫璃染墨1 小时前
《从零入门Linux系统篇(二十九):文件篇·二——深入文件描述符:从文件描述符表到重定向,再到Shell实现》
linux·运维·服务器·c++·驱动开发·系统架构
消费知多少1 小时前
解析勤策签约大西洋焊接费用核销实践案例
开发语言·c#
LabVIEW开发2 小时前
LabVIEW按段拆分TDMS文件的格式边界与重构
开发语言·数据库·重构·labview·labview知识·labview功能·labview程序
码匠许师傅2 小时前
【C++ 面试真题】35. 聊聊 C++ 的万能引用(T&&)和完美转发(std::forward)
java·c++·面试
asdzx672 小时前
使用 Python 为 Excel 添加各类数据验证规则
开发语言·python·excel
Romantic_love_2 小时前
理解USART真实收发过程
开发语言·stm32·单片机·学习
撩得Android一次心动2 小时前
Kotlin 语言【知识点整理3】
java·开发语言·笔记·学习·kotlin