当前位置: 首页 > news >正文

手机网址是什么/seo关键词优化推广哪家好

手机网址是什么,seo关键词优化推广哪家好,南京网站建设王道下拉??,山西疫情现在严重吗在这一章中C语法之模板函数和模板类-CSDN博客 我们学习了怎样写模板函数和模板类,接下来我们来学习系统给我们写好的两个模板类:map和vector。 我相信有了上文的基础,能帮助我们更好的理解这些模板类。 map和vector 是C STL(标准模板库) 中的一部分&a…

在这一章中C++语法之模板函数和模板类-CSDN博客

我们学习了怎样写模板函数和模板类,接下来我们来学习系统给我们写好的两个模板类:map和vector。

我相信有了上文的基础,能帮助我们更好的理解这些模板类。

map和vector 是C++ STL(标准模板库) 中的一部分,基于模板技术实现的类。

map是一种键值对管理的类,想象一下,如果你需要管理类似的数据:

姓名和年龄:zhengyong------21

或者姓名和ID,账号和密码。

按普通的方法,我们怎么处理。

定义两个数组?比如:

#include <iostream>using namespace std;int main() {char name[100][10] = { {"zhengyong"},{"zhangsan"}};int age[100] = { 21,33 };for (int i = 0; i < 2; i++)cout << "name:" << name[i] << "\tage:" << age[i] << endl;}

结果:

 

这样通过下标名的方式对应关联。好像是实现了功能,但这样的代码只实现很小的一部分,未来将会有很多问题。

比如如何动态的分配数组的大小,我的键值对数量不是固定的。

而且这种关联性较弱。

当然以上两个问题,你都会想到解决方法,比如数组的定义用指针的方法,new来分配。

第二个是定义一个类,类中有成员变量name 和age。

是解决了一部分问题,但是这样做,还是显得比较麻烦,如果以后还需要对数据的增删改查呢?

你需要花费很多的时间来处理这些东西。

这种手动维护的方式,非常的不方便。也较易出错。 

那么在这里我推荐使用map模板类,来处理这些。它将是你非常好的帮手。

map使用方法:

#include <iostream>
#include <map>
using namespace std;int main() {map<const char*, int> myMap;myMap["zhengyong"] = 21;myMap["zhangsan"] = 33;cout << myMap["zhengyong"] << endl;}

输出21:

map类中的<>,用来定义键值对的类型。 

然后关联就是在[]里代表的是键,值就是在等号右边,如myMap["zhengyong"] = 21;

这样就会很方便的关联,取值,以及其它操作等。

但是上面这种用法有危险,为什么,因为你的键是指针类型的,它关联的是指针地址,并不是它指向的字符串,那么你的后续的增删改查都是通过地址值来实现了,这违背了我们预想的键值对的初衷,如zhengyong 字符串关联的是21.

但为什么我输出又正常呢?这是因为编译器把这个常量字符串用的同一个地址。

所以现在看似正常,在某些情况下就会出错。比如如下代码:

#include <iostream>
#include <map>
using namespace std;int main() {map<const char*, int> myMap;myMap["zhengyong"] = 21;myMap["zhangsan"] = 33;const char* cp = "zhengyong";char c[10] = "zhengyong";const char* cp2 = c;cout << myMap[cp] << endl;cout << myMap[cp2] << endl;}

结果:

可以看到,cp指针指向的常量字符串"zhengyong",都是同一个地址,所以输出没问题。

我们接着用数组接收字符串,在栈中分配地址。

然后cp2指针指向它,虽然都是同一个字符串,但是第二个输出的却是0.

所以可以判断这里是根据地址内容生成的键的。

这里另一个需要注意的点是,当你使用了myMap["other"],其它键名之前没有的。

这里默认就会在myMap创建一个这样的键,默认值为0.

所以以后为了避免这种情况,我们可以使用at方式,at后面跟键名取值,如下:
myMap.at(cp) 这样如果没有这个键,它不会创建,而是会报错。

那么用指针这个方式表达字符串会造成一些麻烦,我们应该怎么解决呢?

推荐使用字符串类string,就没有这些问题了。它是根据字符串来处理的。键值对,是绑定字符串的。

如下示例:

#include <iostream>
#include <map>
#include<string>
using namespace std;int main() {map<string, int> myMap;  //直接用string类型myMap["zhengyong"] = 21;myMap["zhangsan"] = 33;cout << myMap["zhengyong"] << endl;}

ok,上面的用法是正常的。

前面说了访问键值推荐用at方法,那么创建键值对的时候也是有一点要说明的。

myMap["zhengyong"] = 21;  如果是这样创建,会覆盖掉原来的键(如果有)。

如果不想覆盖,可以用insert或者emplace成员函数创建。

 myMap.insert({ "zhengyong", 21 }); // 如果键已存在,则忽略myMap.emplace("zhengyong",21);

或者我们可以自己编写一下逻辑,用find查找一个键名是否存在,如果不存在则创建:

if (myMap.find("zhengyong") == myMap.end()) {myMap["zhengyong"] = 21; // 仅在键不存在时插入
}

好了,以上就是map大概的用法,更多的细节,比如map类的其它成员函数,大家可自行查找,这里就不过多的介绍了。

vector模板类

vector可以看作是一个动态数组处理类。

像我们之前,常规的一维数组,比如int a[10],要实现动态分配大小,或者增加删除元素。

很麻烦。所以vector就自然的出现了。

我们使用vector来定义数组,如下:

 vector<int> vc; //定义int 数组。

尖括号里面int表示 定义int类型的数组。

此时vc里面是没有元素的,是空的。我们可以用emplace_back来添加元素

完整示例:

#include <iostream>
#include<vector>
using namespace std;int main() {vector<int> vc; //定义int 数组。vc.emplace_back(11);vc.emplace_back(22);vc.emplace_back(100);//添加三个元素。//接着访问输出for (int i = 0; i < vc.size(); i++)cout << vc[i] << endl;//删除第二个元素vc.erase(vc.begin()+1); //erase需要指向元素的迭代器作为参数,vc.begin可以获取第一个元素的迭代器,然后加上1,就是第二个了//再输出看一下效果cout << "删除了第二个元素的vc数组" << endl;for (int i = 0; i < vc.size(); i++)cout << vc[i] << endl;}

效果:

 

注意这里不能用vc[0]=11这样来添加元素,因为此时vc里是没有元素的vc[0]没有添加的功能,所以为空。只有当vc[0]创建了之后,才可以vc[0]=11(修改元素的值)

另:我们也可在定义时初始化赋值:

vector<int> vc = { 11,22,100 };

也可以预先分配数组大小如:

vector<int> vc(3);//创建三个元素的数组

这样就可以用vc[0]=11直接赋值了。 

上面是一维数组的使用方法,如果是二维数组呢?

我们需要嵌套使用,比如定义一个vc一维数组,然后vc里的每个元素又是一个vector。

示例:


#include <iostream>
#include<vector>
using namespace std;int main() {vector<vector<int>> vvc;  //vector<>里的类型还是vector//我们先创建一个一维vectorvector<int> vc = { 1,2,3 };//再来一个vector<int> vc1 = { 2,8,8 };//然后将这两个添加到vvc里去,这样就是个二维数组了。vvc.emplace_back(vc);vvc.emplace_back(vc1);for (int i = 0; i < vvc.size(); i++){for (int j = 0; j < vvc[i].size(); j++)cout << vvc[i][j] << "\t";cout << endl;}}

效果:

总结:可以看到,我们之前如果用普通数组来处理字符串,管理键值对类的数据,以及对数组的增删改查极为不便,现在把map vector string 这些加入到C++后,对我们写程序会方便很多。

http://www.whsansanxincailiao.cn/news/32040876.html

相关文章:

  • 专业制作行驶证/优化设计五年级上册语文答案
  • 公司网站工程案例怎么做/hyein seo是什么牌子
  • 临安建办网站/seo网站推广教程
  • 门户网站代做/2345导航网址
  • ps在线网站/海南网站推广
  • 怎么做自己的视频网站/百度电脑版下载官网
  • 做娱乐网站少10个页面/第三方关键词优化排名
  • 建设企业网站服务/seo公司的选上海百首网络
  • 什么网站教做美食/线上营销怎么做
  • 赤峰市做网站建设的公司/营销网络
  • 静态旅游网站开发论文/网络营销的主要传播渠道是
  • 做分析图的地图网站/企业培训课程视频
  • wordpress建站怎么学/seo实战培训学校
  • 做网站需要会哪些编程语言/大数据营销的案例
  • wordpress网站背景/推广赚钱平台有哪些
  • 网站建设 图片问题/惠州网站排名提升
  • 做搜狗pc网站优/谷歌seo怎么做
  • 微小店网站建设平台/百度seo关键词点击软件
  • 甲级设计院加盟分公司/班级优化大师免费下载电脑版
  • 潍坊高端网站开发/百度公司推广电话
  • 个人建网站一般多少钱/重庆网站seo搜索引擎优化
  • 承接政府网站建设/全国最好网络优化公司
  • b2c网站推广方案/2022磁力链接搜索引擎推荐
  • 南昌旅游集团网站建设/百度贴吧官网网页
  • 大连做网站比较好的公司/活动软文怎么写
  • 网站开发维护专员岗位职责/公司网站设计制作
  • 建筑公司发展规划/网站seo优化技巧
  • wordpress文章点赞/太原自动seo
  • 专业风水网站建设/如何做好产品网络推广
  • 网站建设适合什么单位/软文推广收费