记录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类型为二元谓词
相关推荐
Data_Journal4 小时前
使用 AutoScraper 进行网页抓取:分步教程
大数据·开发语言·数据库·python·scrapy
yume_sibai5 小时前
12-Rust 性能优化指南(性能分析 + 内存优化 + SIMD + 并发优化 + 编译器优化 + 基准测试)
开发语言·性能优化·rust
萧瑟余晖5 小时前
Hibernate 核心原理与架构详解
开发语言·架构·hibernate
爱喝水的鱼丶5 小时前
SAP-ABAP:SAP MM 模块物料主数据批量导入与增强开发:字段扩展、校验逻辑与批量导入工具开发
开发语言·性能优化·sap·abap·增强·经验交流·mm
geovindu5 小时前
rust:Builder Pattern
开发语言·设计模式·rust·建造者模式
白远山5 小时前
健身场馆无人自动化解决方案:从架构到落地实践
java·开发语言·数据库·数据挖掘·需求分析
xxwxx__5 小时前
C++ STL set 与 map 全套详解:关联式容器、红黑树底层、代码坑点、刷题实战
数据结构·c++
Data_Journal6 小时前
如何将网页抓取用于机器学习
大数据·开发语言·数据库·python·scrapy
郝学胜-神的一滴6 小时前
Effective Python 条款 13:善用星号解包,告别下标切片拆分的坑
服务器·开发语言·数据结构·python·程序人生·pycharm
一水鉴天6 小时前
词、术语、概念:从特征集收束到统一拓扑变换的升格与降格模型 20260915(豆包)
开发语言·人工智能