SLT中的容器学习与函数谓词

  • 1、vector向量学习
  • 2、stack栈学习
  • 3、queue队列学习
  • 4、优先队列学习
  • 5、list学习
  • 6、set来引出函数谓词
  • 7、map容器
  • 8、 multimap容器

java的集合框架 相当于 C++ STL(标准模板库) 在iostream库中

1、vector向量学习

// C ++ vector 向量 容器 内部封装大小数组作为容器,能够存放任意动态数组(数据结构)

#include <iostream>
#include <vector> // 引入 vector 容器的支持
using namespace std;int main(){//内定了模板函数(泛型)vector<int> vector1;//指定10的空间大小vector<int> vector2(10);//指定10的空间大小,每一个都是0vector<int> vector3(10,0);//插入数据vector<int> vector4;// vector.begin() 迭代器插入到前面// vector.end() 迭代器插入到后面vector4.insert(vector.begin(),40);vector4.insert(vector.begin(),50);vector4.insert(vector.begin(),60);cout << "vector4.front()" << vector4.front()<< endl; // 60vector4.front() = 99;//修改第一个//最后一个vector4.back() = 777//变成 99 50 777//移除 第一个元素vector4.erase(vector4.begin());// 50 777    //循环打印 默认 "从大到小" 输出for(int i = 0; i < vector4.size(); i++) {//上面第一个60被移除了,最后一个40被修改成777.输出50、777//vector4[i]中的[]是运算符重载,跟数组的[]不一样cout << "item: " << vector4[i] << endl;}// 迭代器 循环遍历for(vector<int>::iterator iteratorVar = vector4.begin(); iteratorVar != vector4.end(); iteratorVar++){// 输出50、777cout << "item: " << vector4[i] << endl;}// auto kotlin 自带类型推导for(auto iteratorVar = vector4.begin(); iteratorVar != vector4.end(); iteratorVar++){// 输出50、777cout << "item: " << vector4[i] << endl;}// NDK开发中一定要用容器,应该用queue 队列,这个几乎用不到。
return 0;
}

2、stack栈学习

int main(){stack<int> s;s.push(1);s.push(2);s.push(3);for(int i = 0; i < s.size(); ++i) {//报错 stack内部没有重载[],也没有支持迭代器stack<int> :: iteratorcout << s[i] << endl;}//循环把元素清空while(!s.empty) {int top = s.top();//拿第一个元素s.pop;//把元素弹出去}// NDK 开发中,几乎用不到!return 0;
}

3、queue队列学习

先进先出,用管道来理解是最容易的

#include <iostream>
#include <queue> // 队列支持(内部:基本上 链表、数组)
using namespace std;int main(){queue<int> queueVar;queueVar.push(20);queueVar.push(40);queueVar.push(60);//第一个元素是20cout << "queueVar.front()" << queueVar.front() << endl;queueVar.front()  = 88;//最后一个元素是60cout << "queueVar.back()" << queueVar.back() << endl;queueVar.front()  = 88;// 跟栈stack一样,只能把前面的元素弹出去while(!queueVar.empty) {int top = queueVar.front();//拿第一个元素cout << top << endl; //88 40 88queueVar.pop;//把元素弹出去}return 0;
}

4、优先队列学习

#include <iostream>
#include <queue> // queue的子集
using namespace std;
// queue 单端队列  Duque 双端
//priority_queue 内部对vector 有一定的封装
int main(){priority_queue<int> priorityQueue;//隐式代码 vector<int>, less<int> 你看不到//less<int>将当前和上一个元素比大小,从大到小 ,greater<int> 反过来,会输出 10 20 30 ...//vector<int>,内部需要,你就给它。//priority_queue<int, vector<int>, less<int>> priorityQueue;priorityQueue.push(10);priorityQueue.push(20);priorityQueue.push(30);priorityQueue.push(40);priorityQueue.push(50);priorityQueue.push(60);//第一个元素是 60cout << "priorityQueue.top()" << priorityQueue.top() << endl;// 循环遍历while(!priorityQueue.empty) {int top = priorityQueue.top();//拿第一个元素cout << top << endl; // 60 50 40 30 20 10queueVar.pop;//把最前面元素消费掉}return 0;
}

5、list学习

javja:ArrayList采用Object[]数组, C++的list 内部:采用链表

#include <iostream>
#include <list>
using namespace std;int main(){list<int> listVar;//插入操作 到前面listVar.push_front(50);//后面listVar.push_back(60);//插入到什么位置,也是签名,跟push_front一样,相对灵活listVar.insert(listVar.begin(), 70);listVar.insert(listVar.end(), 80);//遍历,不能通过角标访问for(list<int> :: iterator it = listVar.begin(); it != listVar.end();it ++) {cout << *it << ednl; // 70 50 60 80}//修改listVar.back() = 88;//删除最前面listVar.erase(listVar.begin()):// NDK开发中使用较少return 0;
}

6、set来引出函数谓词

#include <iostream>
#include <set> // 内部实现:红黑树结构,会对你存入的数据进行排序,但是绝对不允许元素相同
using namespace std;class Person{public:string name;int id;Person(string name, int id): name(name),id(id){}
};
// C++ 默认的这个源码没有对象比较的功能,其实这点跟java也差不读
// bool operator()(const _Tp& __x, const _Tp& __y) const{return __x < __y;}
// 系统源码谓词做不到比较对象,自定义这个功能【自定义谓词】
bool doCompareAction(const Person & person1, const Person & person2){return person1.id < person2.id;
}// 真正的谓词,仿照系统源码写
struct doCompareAction2{public:bool operator() (const Person & person1, const Person & person2){return person1.id < person2.id;}
};
int main(){set<int, less<int>> setVr; // __x < __y 从小到大,默认是less//添加参数,不需要用迭代器,也不需要指定位置setVar.insert(1);setVar.insert(2);setVar.insert(3);setVar.insert(4);//重复插入不会报错 std::pair<iterator,bool>pair<set<int,less<int>>::iterator,bool> = setVar.insert(1);//res.first 获取第一个元素  迭代器//res.second 获取第二个元素  boolbool insert_success = res.second;if(insert_success) {cout << "成功" << endl;} else {cout << "失败" << endl; // 输出失败}//全部遍历for(auto it = setVar.begin(); it != setVar.end(); it++) {}// 对象的排序//set<Person> sp; 没有对象比对功能会报错//set<Person, doCompareAction> sp; 报错,山寨版,达不到谓词的标准set<Person, doCompareAction2> sp;// 构建对象Person p1("sanke",1);Person p1("kevin",2);Person p1("marry",3);// 放到set容器setVar.insert(p1);setVar.insert(p2);setVar.insert(p3);//name string 000 c_str() --- char *    for(set<Person>::iterator it = setVar.begin(); it !+ setVar.end();it++){cout << it->name.c_str() << "," << it->id << endl; }
return 0;
}

7、map容器

#include <iostream>
#include <map>
using namespace std;int main(){// map 会对key进行排序 key不能重复map<int ,string> mapVar;//添加数据方式1mapVar.insert(pair<int ,string>(1, "一"));//第二种mapVar.insert(make_pair(2, "二"));//第三种mapVar.insert(map<int ,string>::value_type(3, "三"));// 上面三种方式key不能重复,跟java一样,会插入失败 ,无法覆盖。//第四种   mapVar[key] = value 会覆盖mapVar[4] = "四";mapVar[4] = "四四"; //循环打印 迭代器for(map<int, string>:: iterator it = mapVar.begin(); it != mapVar.end(); it++){cout << it->first << "," << it->second.c_str() << endl;}pair<map<int, string>::iterator, bool> result = mapVar.insert(map<int ,string>::value_type(3, "三san"));//判断是否成功和成功之后的数据if(result.second) {cout << "成功" << endl;for(result.first == mapVar.begin(); result.first != mapVar.end;result.first++){cout << result.first->first << "," << result.first->second << endl;}}// 查找map<int, string> :: iterator findResult = mapVar.find(3);if (findResult != mapVar.end()) {cout << "找到了" << endl;}return 0;
}

8、 multimap容器

#include <iostream>
#include <multimap>
using namespace std;int main(){// 1、key 可以重复 2key重复的数据可以分组multimap<int, string> multimapVar;multimapVar.insert(make_pair(10, "十个1"))multimapVar.insert(make_pair(10, "十个2"))multimapVar.insert(make_pair(10, "十个3"))multimapVar.insert(make_pair(30, "三十个1"))multimapVar.insert(make_pair(30, "三十个2"))multimapVar.insert(make_pair(130, "三十个3"))multimapVar.insert(make_pair(10, "二十个1"))multimapVar.insert(make_pair(10, "二十个2"))multimapVar.insert(make_pair(10, "二十个3"))for(multimap<int, string> :: iterator iteratorVar = multimap.begin();iteratorVar != multimap.end(); iteratorVar ++) {cout << iteratorVar->first << "," << iteratorVar->second << endl;//输出顺序按照key排序 10 10 10 20 20 20 30 30 30 value不会排序}//核心功能是分组int result;cout << "请输入要查询的key 为int类型" << endl;cin  >> result;multimap<int, string>::iterator it = multimapVar.find(result);//如果输入10 将输出三个 key是10的元素while(it != multimapVar.end()) {cout << it->first << "," << it->second << endl;//需要自己做逻辑,不然又问题。it ++ ;if(it->first != result) {break;}// 严谨些if(it == multimapVar.end()){break;}}return 0;
}

C++ SLT中的容器学习与函数谓词相关推荐

  1. matlab数米粒实验报告,文化学习上机实验中遇到的一些Matlab函数.ppt

    文化学习上机实验中遇到的一些Matlab函数.ppt 上机实验中遇到的一些Matlab函数,(1)* .* . (2)abc linspace(a,b,c) (3)log log10 (4)exp ( ...

  2. 基于Java线程池读取数据库中数据(学习+运用)

    基于Java线程池读取数据库中数据(学习+运用) 以下是学习内容 Main.java import java.util.concurrent.ArrayBlockingQueue; import ja ...

  3. java中vector容器,vector向量容器(常用的使用方法总结)

    关于STL中vector容器的学习,编译运行后边看代码,边看执行结果效果更佳,还是想说看别人的代码一百遍,不如自己动手写一遍. vector向量容器不但能像数组一样对元素进行随机访问,还能随时在尾部插 ...

  4. 我的Android进阶之旅------gt;Android中编解码学习笔记

    编解码学习笔记(一):基本概念 媒体业务是网络的主要业务之间.尤其移动互联网业务的兴起,在运营商和应用开发商中,媒体业务份量极重,其中媒体的编解码服务涉及需求分析.应用开发.释放license收费等等 ...

  5. Python初级学习教程—从入门开始学习(函数、组合数据类型、文件操作、异常、模块)

    文章目录 入门 一.数据的相关操作 二.continue 和 break的区别(易混点) 三.函数 变量的作用域 三.函数进阶 1.函数多个返回值 2.函数参数种类 3.匿名函数 组合数据类型 一.列 ...

  6. K8S中的容器网络概述(编写中)

    目录 参考资料 一.什么是容器网络 1.1 网络命名空间 1.2 veth设备对 二.K8S中节点间通信 2.1 不同Node中的Pod之间通信 三.xx实现概述 参考资料 K8s网络模型 - 腾讯云 ...

  7. python一行输出多个数据_如何在Python中让两个print()函数的输出打印在一行内?

    1.两个连续的print()函数为什么在输出时内容会分行显示? 解:print()中有两个默认参数sep和end,其中sep是代替分隔符,end是代替末尾的换行符,默认使用','代替空格,且默认末尾加 ...

  8. c++ hashset的用法_c++ stl容器set成员函数介绍及set集合插入,遍历等用法举例

    c++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器.set/multiset会根据待定的排序准则,自动将元素排序.两者不同在于前者不允许元素重复,而后者允许. 1 ...

  9. 【C++】【第六篇-2】【黑马 p215~p242】【list容器】【set/multiset容器】【map/multimap容器】【函数对象】【谓词】【内建函数对象】

    [C++][第六篇-2][黑马 p215~p242][list容器][set/multiset容器][map/multimap容器][函数对象][谓词][内建函数对象] 3.7 list容器(p215 ...

  10. 《C++Primer》第九章-顺序容器-学习笔记(1)-顺序容器定义与操作

    <C++Primer>第九章-顺序容器-学习笔记(1) 文章目录 <C++Primer>第九章-顺序容器-学习笔记(1) 摘要 顺序容器的定义 容器元素的初始化 将一个容器初始 ...

最新文章

  1. CCS5.5 中报错 Does not match the target type,not loaded 的一种情况
  2. libdgl.dll WinError 126
  3. 语义分析的一些方法(中篇)
  4. php教程调用数据库,PHP数据库调用类调用实例,php数据库调用实例_PHP教程
  5. 2.12 主成分分析(下)
  6. MySQL中事务控制语句_Mysql事务控制语言
  7. .net程序员写业务代码需要注意的地方
  8. php二维数组引用变量,PHP二维数组的引用赋值容易犯的错误
  9. go mock mysql_go sqlmocks的使用
  10. 基于深度学习的视觉 SLAM 综述
  11. 2012百度招聘笔试题目
  12. python如何获取图片的尺寸大小_Python获取图片的大小/尺寸
  13. 阿里云账号登录名修改方法(图文详解)
  14. unity 神笔画画
  15. Top,vmstat命令排查CPU使用率,负载问题
  16. html vertical-align:middle垂直居中 的方法
  17. 重磅干货不容错过!2017云栖大会汇总资料,速来领取!
  18. 互联网摸鱼日报(2022-10-11)
  19. 网络显示已连接,但是无网络解决办法
  20. 如何绕过校园网验证,在宿舍免费上办公区的网,享受不拥挤的网络

热门文章

  1. delphi与网页交互
  2. Python中的变量作用域,LEGB规则和闭包原理
  3. 学习手机软件开发学什么,怎样学?
  4. 30天自制操作系统——第十七天制作命令行窗口
  5. mysql启动报错之[ERROR] Found option without preceding group in config file /etc/my.cnf at line
  6. python模拟登录中国海洋大学教务系统(青果)- 爬取学期所有专业课至excel - 并进行课表排课(三)
  7. 信息检索1.2--几个实用的限定词,site title URL
  8. python 正则表达式 ,看这篇就够了
  9. python如何调整word表格宽度_python-docx编辑word表格
  10. 语音模块:pyttsx变声项目