记录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类型为二元谓词
相关推荐
“AI国潮设计-小江”3 小时前
《Python+SDXL实战:用ControlNet精准控制“英歌舞翻糖吐司”构图,附批量生成脚本》
开发语言·人工智能·python·prompt·aigc
程序喵大人3 小时前
【C++入门】编译链接模型 - 01 一个 C++ 程序是怎样变成可执行文件的
开发语言·c++·编译链接模型
by209994 小时前
vector 的模拟实现:扩容与边界的详细阐述(下)
c++·经验分享·vector·动态数组
sunshine22 girl4 小时前
Java学习七 Java 项目实战1-项目创建和主页面搭建
java·开发语言·学习
菜鸟~noob2335 小时前
【电子战】第三季预告—波武器与电子系统强力毁伤
开发语言·数据库·matlab·电子战
惊讶的猫6 小时前
工具选对之后还不够:商城 Agent 的参数与权限治理
开发语言·python
cmpxr_6 小时前
【MicroPython】如何刷新ESP8266的固件
开发语言·micropython
搭贝6 小时前
上厕所的时间搭好一套系统:AI自动生成实测
开发语言·人工智能·低代码·ai·php·搭贝
智感子6 小时前
智能称重·数据上云:从仪表读数到可追溯的计量凭证
开发语言·php
\光辉岁月/7 小时前
7.javase-面向对象
java·开发语言