记录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类型为二元谓词
相关推荐
晚风予卿云月3 分钟前
【C++高并发内存池】 1.定长内存池的实现
开发语言·c++·内存管理
devilnumber25 分钟前
Lambda 表达式(Java)优缺点清晰分析
java·开发语言·python
开开心心就好1 小时前
电脑小说阅读器,支持朗读和自定义皮肤
服务器·开发语言·javascript·算法·pdf·c#·音视频
Smoothcloud润云1 小时前
GPU远程纳管节点频繁离线?心跳、DNS与时钟排障实战
运维·服务器·开发语言·人工智能·php·gpu算力
class心平气和1 小时前
ADB 工具函数 Python 使用教程
开发语言·python·adb
闻缺陷则喜何志丹1 小时前
【c++20】协程与屏障
c++·算法·c++20·携程·屏障
会编程的小孩1 小时前
C++ 内存分区、堆与栈、static、union 完整修正版文档
c++
滕州市燕猫虎计算机科技工作室个体工商户1 小时前
Java,Java NIO,Java NIO2,Java AIO,AsynchronousServerSocketChannel
java·开发语言·nio·aio·nio2
古城小栈1 小时前
Rust 学习路线,供初学者参考
开发语言·rust
喵了几个咪2 小时前
GoWind CMS 拆解:给 NL2SQL 上四把锁——智能问数的安全边界
开发语言·后端·安全·微服务·golang·gowind