C++ 语言学习 day14 复习 (6)
创始人
2024-03-07 12:05:31

1.stack  / queue(栈,队列)

stack

构造函数       stack  v;

入栈               v.push(i);

出栈               v.pop();

是否为空      v.empty()

queue 

构造函数     queue v;

入队             v.push(i);

出队             v.pop();

是否为空      v.empty();

代码:

#include 
#include         /*引入栈容器*/
#include         /*引入队列容器*/
using namespace std;    /*引入标准命名空间*/void test0()
{/**** 创建栈容器对象 *****/stack v;/**** 入栈数据:1,2,3,4,5,6 ***/for(int i = 1; i < 7;i++){v.push(i);cout << "入栈栈顶数据:" << v.top() << endl;}cout <<"—————————— 出栈 ——————————" << endl;/**** 出栈数据:6,5,4,3,2,1 ***/while(v.size() != 0){cout << "出栈栈顶数据:" << v.top() << endl;v.pop();}/**** 判断栈是否为空 *****/cout << "栈是否为空:" << (v.empty() == true ? "为空" : "非空") << endl;
}void test1()
{/*** 1.创建队列容器对象 ***/queue v;/*** 2.入队数据: 1,2,3,4,5,6 ****/for(int i = 1; i < 7;i++){v.push(i);/*入队*/cout << "入队队头元素:" << v.front() << "\t入队队尾元素:" << v.back() << endl;}cout << "———————— 出队元素 ——————————" << endl;/*** 3.出队数据:1,2,3,4,5,6 *****/while(v.size() != 0){cout << "出队队头元素:" << v.front() << "\t出队队尾元素:" << v.back() << endl;v.pop();    /*出队*/}/*** 4.判断队列是否为空 ****/cout << "队列是否为空:" << (v.empty() == true ? "为空" : "非空") << endl;}int main()
{test0();test1();return 0;
}

2.pair  (键值对  iostream 里面自带的)

构造函数: pair v(10000, "aaaaaa");

输出模式: v.first,    v.second

代码:

#include using namespace std;/********** pair 键值对 ************ * 类使用: pair* 成员:
template
struct pair
{pair(_T1 key,_T2 value):first(key),second(value){} //构造函数typedef _T1 first_type;    /// @c 第一个元素的类型:主键typedef _T2 second_type;   /// @c 第二个元素的类型:数值_T1 first;                 /// @c 第一个元素的值:主键值_T2 second;                /// @c 第二个元素的值:value值
};
********************************///模仿 pair 类
template
struct my_pair
{/** 默认权限是 公有权限 **/my_pair(_T1 key,_T2 value):first(key),second(value){} //构造函数typedef _T1 first_type;    // @c 第一个元素的类型:主键typedef _T2 second_type;   // @c 第二个元素的类型:数值/*** 主要学习: first ,  second ***/_T1 first;                 // @c 第一个元素的值:主键值_T2 second;                // @c 第二个元素的值:value值
};int main()
{/***** 案例: 主键:学号, 值:学生姓名 *******/my_pair v(1000,"张三");cout << "主键:" << v.first << "\t值:" << v.second << endl;/***** 标准的键值对 ****/pair v1(1001,"李四");cout << "主键:" << v1.first << "\t值:" << v1.second << endl;/***** 主要解决 一个参数无法操作的内容,例如 返回值类型只允许一个返回值,但是项目需要返回两个甚至*                                    多个,所以可以使用键值对实现方案 ****************/return 0;
}

3.set   (集合  不可重复)  /multiset(数据可重复存储)

/************* set 容器 ******************
 * 特点:
 *      1.去除重复值
 *      2.插入时自动排序
 *      3.容器内部元素插入时为常对象 - 只能访问常函数
 *        (自身就是key主键,主键不能修改)

*     4. set容器无法修改内部元素值
 * **************************************/

构造函数: set v;

增加数据:     v.insert(111);

查询数据:  v.find(111);

统计set 容器元素个数 :  v.count();

容器是否为空 : v.empty();

clear();      //清除所有元素

erase(pos);      //删除pos迭代器所指的元素,返回下一个元素的迭代器

erase(beg, end); //删除区间(beg, end)的所有元素,返回下元素的迭代器

erase(elem); //删除容器中值为elem的元素。

代码:

#include 
#include       /*set集合容器*/
#include    /*单端数组容器*/
using namespace std;/*标准命名空间*/#define ADDR_SIZE(x) (sizeof(x)/sizeof(x[0])) //求取元素个数
/************* set 容器 ******************* 特点:*      1.去除重复值*      2.插入时自动排序*      3.容器内部元素插入时为常对象 - 只能访问常函数*        (自身就是key主键,主键不能修改)* **************************************/
void test0()
{set v;int addr[] = {1,6,78,23,5,45,2,5}; /*无序数组*/cout << "***** 插入数据 **** " << endl;pair::iterator, bool> pair_set;for(size_t i = 0; i < ADDR_SIZE(addr);i++){pair_set = v.insert(addr[i]);  /*插入数据*/if(pair_set.second == true){cout << "插入成功:" << *pair_set.first << endl;}else{cout << "插入失败:" << addr[i] << endl;}}cout << "***** 打印set数据 ********" << endl;set::iterator it;for(it = v.begin(); it != v.end() ; it++){cout << *it << ",";}cout << endl;cout << "***** 试图去修改set容器元素值 ******" << endl;it = v.begin(); /*第一元素*/cout << "第一个元素:" << *it << endl;// *it = 500;  set容器无法修改内部元素值cout << "***** 容器大小和判断是否为空 *****" << endl;cout << "当前元素个数:" << v.size() << endl;cout << "当前容器是否为空:" << (v.empty() == true ? "为空" : "非空") << endl;cout << "***** 容器查找和统计元素 ******" << endl;it = v.find(7);if(it != v.end()){cout << "找到了元素为:" << *it << endl;}else{cout << "容器内没有找到为7的元素" << endl;}int num = v.count(5);cout << "统计容器内元素为5的个数:" << num << endl;
}/************* multiset 容器 ******************* 特点:*      1.插入时自动排序*      2.容器内部元素插入时为常对象 - 只能访问常函数*        (自身就是key主键,主键不能修改)* **************************************/
void test1()
{multiset v;int addr[] = {1,6,78,23,5,45,2,5}; /*无序数组*/cout << "***** 插入数据 **** " << endl;multiset::iterator it;
#if 0 //插入for(size_t i = 0; i < ADDR_SIZE(addr);i++){it = v.insert(addr[i]);  /*插入数据*/}
#elsevector v_vector;for(size_t i = 0; i < ADDR_SIZE(addr);i++){v_vector.push_back(addr[i]);}cout << "vector的数据:" << endl;for(int i = 0; i< v_vector.size() ;i++){cout << v_vector[i] << ",";}cout << endl;v.insert(v_vector.begin(),v_vector.end());
#endifcout << "***** 打印set元素 ****" << endl;for(it = v.begin() ; it != v.end() ;it++){cout << *it << ",";}cout << endl;
#if 1v_vector.assign(v.begin(),v.end());cout << "vector的数据:" << endl;for(int i = 0; i< v_vector.size() ;i++){cout << v_vector[i] << ",";}cout << endl;
#endifcout << "***** 试图去修改set容器元素值 ******" << endl;it = v.begin(); /*第一元素*/cout << "第一个元素:" << *it << endl;// *it = 500;  set容器无法修改内部元素值cout << "***** 容器大小和判断是否为空 *****" << endl;cout << "当前元素个数:" << v.size() << endl;cout << "当前容器是否为空:" << (v.empty() == true ? "为空" : "非空") << endl;cout << "***** 容器查找和统计元素 ******" << endl;it = v.find(7);if(it != v.end()){cout << "找到了元素为:" << *it << endl;}else{cout << "容器内没有找到为7的元素" << endl;}int num = v.count(5);cout << "统计容器内元素为5的个数:" << num << endl;
}int main()
{test1();return 0;
}

4.map(地图) /multimap(可重复 地图)

/*********** map容器 ************
 * 特点:
 *      1.去除重复的主键
 * ****************************/

构造函数 ;  map v;

增加数据 : v.insert(pair(1,"aaaa"));

                        v[键值]= value; ==>  v[1]="aaaa" (修改,可以通过主键修改value值(①存在则修改②不存在则插入)

删除数据: 

clear();      //清除所有元素

erase(pos);      //删除pos迭代器所指的元素,返回下一个元素的迭代器

erase(beg, end); //删除区间(beg, end)的所有元素,返回下元素的迭代器

erase(键值); //删除容器中值为  键值 的元素。

代码:

#include 
#include       /*引入 map 容器*/
#include 
using namespace std;/*引入标准命名空间*/
/*********** map容器 ************* 特点:*      1.去除重复的主键* ****************************/
void test0()
{/*** 1.实例化map对象 map***/map v;/*** 2.插入数据 *****/string names[] = {"张三","李四","王五","赵六","蕾蕾","李丽"};for(int i = 5; i >= 0;i--){//int id = rand() % 5 + 10000;int id = 10000 + i;pair< map::iterator , bool> pair_map;pair_map = v.insert(pair(id,names[i]));cout << "插入:" << (pair_map.second == true ? "成功" : "失败") << endl;cout << "学号:" << id << "\t姓名:" << names[i] << endl;}cout << "****打印map容器数据****" << endl;map::iterator it;for(it = v.begin() ; it != v.end() ; it++) // *t <==> pair{cout << "主键:" << (*it).first <<"\tvalue值:" << (*it).second << endl;}cout << "****访问,可以通过主键访问value值****" << endl;cout << v[10000] << endl;cout << v[10004] << endl;cout << "****修改,可以通过主键修改value值(①存在则修改②不存在则插入)" << endl;v[10000] = "王";v[10100] = "蒋";cout << "****打印map容器数据****" << endl;for(it = v.begin() ; it != v.end() ; it++) // *t <==> pair{cout << "主键:" << (*it).first <<"\tvalue值:" << (*it).second << endl;}
}int main()
{srand(time(NULL));  /*制种*/test0();return 0;
}

5.set 和 map

代码:

#include 
/***** 这两个容器底层都是使用 二叉树实现 ****** 1.自动排序* 2.使用二分法方式* 3.是数组和链表的折中方案* *************************************/
#include   /*集合容器*/
#include   /*图容器*/
using namespace std;/****** 自定义一个类 *****/
class People
{
public:People(string ID = "0",string name = "",string sex = "女",int age = 0,int height = 0):m_ID(ID),m_name(name),m_sex(sex),m_age(age),m_height(height){/*构造函数*/}/********* 只读的函数,就一定要制作成const常函数,否则 set 容器使用不了 *******/bool operator <(/*this*/const People &people) const{return this->m_ID < people.m_ID;}friend ostream &operator <<(ostream &out,const People &people){out << "\t" << people.m_ID<< "\t" << people.m_name<< "\t" << people.m_sex<< "\t" << people.m_age<< "\t" << people.m_height;return out;}string ID() const;string name() const;void setName(const string &name);string sex() const;void setSex(const string &sex);int age() const;void setAge(int age);int height() const;void setHeight(int height);protected:string m_ID;    /*身份证号*/ //一般唯一的就是身份证号string m_name;  /*姓名*/string m_sex;   /*性别*/int m_age;      /*年龄*/int m_height;   /*身高*/
};void test_set()
{
#if 0/*   1.实例化 set 容器装载 People 对象 */set v;
#else/*   1.实例化 set 容器装载 People 对象,自定义规则set */class Cmp_People{public:bool operator ()(const People &people,const People &people2){return people.height() < people2.height();}};set v;
#endif/*   2.插入信息到容器 :默认使用运算符重载 < 比较运算符*/v.insert(People("522724193561231651","王廷胡","男",18,160));v.insert(People("522724193561231652","望提升","女",16,165));v.insert(People("522724193852231652","马旭升","男",19,185));v.insert(People("522624193852231653","马云","男",45,165));/*   3.遍历打印数据  */set::iterator it;for(it = v.begin() ; it != v.end(); it++){cout << *it << endl;}
}void test_map()
{
#if 1/******** 1.实例化map容器装载People **********///map v;class Cmp_string{public:bool operator()(const string &str1,const string &str2){return str1 < str2;}};map v;/******** 2.装载数据到map中 ******************/v.insert(pair("522724193561231651",People("522724193561231651","王廷胡","男",18,160)));v.insert(pair("522624193852231653",People("532624193852231653","马云","男",45,165)));v["522724193561231652"] = People("522724193561231652","望提升","女",16,165);/******** 3.遍历打印数据 **********************/map::iterator it;for(it = v.begin();it != v.end() ; it++){cout << (*it).second << endl;}cout << "————————————————————————————————————" << endl;/******** 4.中括号访问 ********/cout << v["522724193561231652"] << endl;
#else/******** 1.实例化multimap容器装载People **********/multimap v;/******** 2.装载数据到map中 ******************/v.insert(pair("522724193561231651",People("522724193561231651","王廷胡","男",18,160)));v.insert(pair("522724193561231651",People("522724193561231651","李白","男",18,160)));/******** 3.遍历打印数据 **********************/multimap::iterator it;for(it = v.begin();it != v.end() ; it++){cout << (*it).second << endl;}
#endif}int main()
{//test_set();test_map();return 0;
}string People::ID() const
{return m_ID;
}string People::name() const
{return m_name;
}void People::setName(const string &name)
{m_name = name;
}string People::sex() const
{return m_sex;
}void People::setSex(const string &sex)
{m_sex = sex;
}int People::age() const
{return m_age;
}void People::setAge(int age)
{m_age = age;
}int People::height() const
{return m_height;
}void People::setHeight(int height)
{m_height = height;
}

6. 新学的内容  (json  )(它的作用还不知道)

JSON(JavaScript Object Notation, JS对象简谱)是一种轻量级的数据交换格式。它基于 ECMAScript(European Computer Manufacturers Association, 欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

了解连接 : JSON_百度百科 (baidu.com)

在线格式JSON:Json在线格式化工具-Json解析视图查看器-Json在线解析格式化工具 (jsons.cn)

代码:

#include 
#include 
#include 
using namespace std;#include "json/json.h" /* 引入json 头文件 */
using namespace Json;int main()
{/***  定义一个 json 对象 ****/Json::Value value;/*** 没有则增加,有则修改 ****/value["姓名"] = "王廷胡";value["年龄"] = 18;value["性别"] = "男";value["身高"] = 165;value["家庭"] = "和睦";/***** value 转 基础类型 *****/cout << "姓名:" << value["姓名"].asString() << endl;cout << "年龄:" << value["年龄"].asInt() << endl;cout << "家庭:" <<  value["家庭"].asCString() << endl;/**** value 输出 *****/cout << value << endl;/**** value 转格式化 C 或 C++ *******/string str_json = value.toStyledString();cout << str_json << endl;const char *C_json = str_json.data();cout << str_json << endl;#if 0fstream fp;fp.open("test.json",ios_base::trunc | ios_base::out | ios_base::in);if(fp.is_open() == false) return -1;fp.write(C_json,strlen(C_json));fp.close();
#elsefstream fp;fp.open("test.json",ios_base::out | ios_base::in);if(fp.is_open() == false) return -1;string str;char ch;while(fp.eof() != true){ch = fp.get();str += ch;}cout << "str = " << str << endl;/***** 将string 或 char * 转为 JSON的Value ******/Reader json_Read;Value json_value;#if 1 /* C++的string 风格 */json_Read.parse(str,json_value);
#else /* C语言的char *风格 */json_Read.parse("{\"姓名\":\"李白\"\"}",json_value);
#endifcout << "姓名:" << json_value["字符集"]["GBK"] << endl;
#endifreturn 0;
}

资源里面有 json 资源


linux   视屏监控

代码:

main.cpp

// #include "cv.h"
// #include "highgui.h"
#include "opencv2/core/core.hpp"  /* 引入opencv核心库 -lopencv_core */
#include "opencv2/highgui/highgui.hpp" /*图像处理库 -lopencv_highgui */
#include "opencv2/imgproc/imgproc.hpp" /*摄像头库 -lopencv_imgproc */using namespace cv; /*引入 OPencv 命名空间 */
int main(int, char**)
{VideoCapture cap(0); /*实例化摄像头 对象  依赖于 0号摄像头 */if(!cap.isOpened()) return -1;/*打开0号摄像头*/Mat frame, edges; /*实例化两个图片对象 frame , edges */namedWindow("edges",1);/*创建窗体 名称为 edges */for(;;){cap >> frame; /*摄像头拍照 结果写入 frame 图片对象 */edges = frame;// cvtColor(frame, edges, CV_BGR2GRAY); /*灰度处理*/// GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5);/*高斯模糊*/// Canny(edges, edges, 0, 30, 3);/*边缘检测*/imshow("edges", edges);if(waitKey(30) >= 0) break;}return 0;
}

 

makefile


#源文件
SOURCES += main.cpp#编译标志
CONFIG += -std=c++11
CONFIG += -g#链接库
CONFIG += -lopencv_core -lopencv_highgui -lopencv_imgproc#编译器
CC = g++#应用名称
APP = a.out
#编译
${APP}:${SOURCES}${CC} $^ ${CONFIG} -o $@clean:rm -rf ${APP}

在相对应的目录下,输入命令:

1.       makefile

2.       ./a.out

就可以了

有些地方要注意:

 

 

 

 

上一篇:使用azure-data factory

下一篇:Docker with IPV6

相关内容

热门资讯

猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...