c++ primer 笔记 (三)

标准库类型string 和 vector ,分别定义了大小可变的字符串和集合。
bitset,提供了一个抽象方法来操作位的集合。提供更方便的处理位的方式(相对于整型值上的位操作符)
vector用于保存一组指定类型的对象。
::作用域操作符    ----  右操作数的名字可以在左操作数的作用域中找到。
using声明
 
使用标准库类型的定义
有一种情况下,必须总是使用完全限定的标准库名字:在头文件中。
理由是头文件的内容会被预处理器复制到程序中。用#include包含文件时,相当于头文件中的文本将成为我们编写文件的一部分。如果在头文件中放置using声明,就相当于在包含该头文件的每个程序中都放置了同一using声明,不论该程序是否需要using声明。
 
通常,头文件中应该只定义确实必要的东西。
字符串字面值与标准库string类型不是同一种类型。
 
string s;
cin >> s; // 读取并忽略开头所有的空白字符(如空格,换行符,制表符)
//  读取字符直至再次遇到空白字符,读取终止
// "    Hello  world! " ---->>>>  Hello
1.读入未知数目的string对象
把输入操作作为判断条件
while(cin >> word)
2.用getline读取整行文本(并不忽略行开头的换行符
getline(cin,line)从输入流的下一行读取,并保存读取的内容到string中,不包括换行符
一个输入流对象和一个string对象
getline函数返回时丢弃换行符,换行符将不会存储在string对象中
s.size()  s.empty()  s[n]  s1 + s2  
s1 = s2 v1 == v2
size操作返回的是string::size_type类型的值
string类类型和许多其他库类型都定义了一些配套类型(companion type)。通过这些配套类型,库类型的使用就能与机器无关(machine-independent)
定义为与unsigned型具有相同的含义(不知道确切类型),而且可以保证足够大能够存储任意string对象长度。
不要把size的返回值赋给一个int变量
 
***********网上找的例子***************

注意,任何存储string的size操作结果的变量必须为string::size_type类型。尤其不能把size的返回值赋给一个int变量。(因为size返回的是一个unsigned类型,而int是signed类型。size能表达的大小是int的2倍)。

string str("some string");   //通过字符串字面值赋值给串
for (string::size_type ix = 0; ix != str.size(); ++ix)   //此处不该为int     用!=,而不用<=
{
   cout<<str[ix]<<endl;
}

vector<int> ivec;
for(vector<int>::iterator ix = ivec.begin(); ix != ivec.end(); ++ix)   
                                                                        //此处不该为int     用!=,而不用<=

{
    *ix = 0; //将各个元素赋值为0
}
*********************************后来发现在书后面有这个例子
string st1, st2 = "The expense of spirit";
st1 = st2;   /replace st1 by a copy of st2
效率问题
.....1先把st1占用的相关内存释放掉
2分配给st1足够存放st2副本的内存空间
3把st2中的所有字符复制到新分配的内存空间。....
当进行string对象和字符串字面值混合连接操作时,+操作符的左右操作数必须至少有一个string类型的
 
string s1 = "hello";          // no punctuation
string s2 = "world"; 
string s3 = s1 + ", ";       // ok:adding a string and a literal
string s4 = "hello" + ", "; // error: no string operand
string s5 = s1 + ", " + "world"  // ok: each + has string operand
string s6 = "hello" + ", " + s2;  // error:can't add string literals
 
虽然任何整型数值都可作为索引,但索引的实际数据类型却是unsigned类型string::size_type
 
cctype头文件
isalnum(c)   isalpha(c)   iscntrl(c)   isdigit(c)  isgraph(c)不是空格,但可打印  islower(c)  isprint(c) 可打印 ispunct(c)标点   isspace(c)   isupper(c)  isxdigit(c)16进制数  tolower(c)  toupper(c)  
vector是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。
和string对象一样,标准库将负责管理与存储元素相关的内存。
vector称为容器,因为它可以包含其他对象。
一个容器中的所有对象都必须是同一种类型的。
vector是一个类模板(class template)不是一种数据类型
可定义任意多种数据类型  vector<int>和vector<string>都是数据类型
 
vector<int> ivec;  //该类型含有int类型对象的vector,变量名为ivec
 
 
vector<int> ivec1;
vector<int> ivec2(ivec1);
vector<int> ivec4(10,-1);
vector<string>svec(10,'hi!');
 
vector对象的重要属性就在于可以在运行时高效地添加元素。
 
vector元素连续存储
初始化一个空vector对象,然后再动态地增加元素(更有效相比于对vector对象预先分配内存)
值初始化
1vector<int> fvec(10);  // 10 elements,each initialized to 0 内置类型  值为0
2vector<string> svec(10);  // 10 elements,each an empty string 默认构造函数
3元素类型可能是没有定义任何构造函数的类类型。标准库仍产生一个带初始值的对象,这个对象的每个成员进行了值初始化。
v.empty() v.size() v.push_back(t) v[n] v1 = v2 v1==v2
vector<int>::size_type
vector中的对象是没有命名的,可以按vector中对象的位置来访问它们。通常使用下标操作符来获取元素。
c++程序员习惯于优先选用!=而不是<来编写循环判断条件。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。后面会讲到
 
size()内联函数  
编译器遇到内联函数时就会直接扩展相应代码,而不是进行实际的函数调用。运行时代价较小
 
 
缓冲区溢出对不存在的元素进行下标操作的结果
迭代器是一种检查容器内元素并遍历元素的数据类型。
对所有容器都适用,下标不一定适用所有容器
vector<int>::iterator iter;
iter的数据类型是由vector<int>定义的iterator类型
每个容器都定义了一个名为iterator的类型,而这种类型支持(概念上的)迭代器的各种操作。
vector<int>::iterator iter = ivec.begin();
ivec.end()---->>指向了“末端元素的下一个”    一个不存在的元素 称为超出末端迭代器
 
如果vector为空,begin返回迭代器与end返回的迭代器相同
由end操作返回的迭代器并不指向vector中任何实际的元素,相反,它只是起一个哨兵(sentinel)的作用,表示我们已处理完vector中所有元素
 
解引用操作符(*操作符)来访问迭代器所指向的元素
*iter = 0;返回迭代器当前所指向的元素
若iter指向ivec第一个元素,则*iter = ivec[0]  指向同一个元素 ,值被赋为0。
for(vector<int>::iterator iter = ivec.begin();iter  != ivec.end();++ivec)
*iter = 0;
const_iterator
能读不能写
P86。。。。。。。。。。。。。。。。。。。。。
bitset类型
bitset类型对象的区别仅在其长度而不在其类型。
bitset<32> bitvec; // 32bits,all zero
只能按位置来访问它们。
相对于C++内置数据类型的数组和指针而言,程序员应优先使用标准库类类型

转载于:https://www.cnblogs.com/wincai/p/4224355.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/420308.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端学习(1334):mongodb增2

const mongoose require(mongoose); mongoose.connect(mongodb://localhost/playground, { useUnifiedTopology: true }).then(() > console.log(数据库连接成功)).catch(err > console.log(err, 数据库连接失败))//创建集合规则 const courseSchema new mongoose.Sche…

vue登录如何存储cookie_vue保持用户登录状态(各种token存储方式)

而作为前端,存储这些值同样有多种方式,你可以存在Cookie、LocalStorage、SessionStorage或者Vuex状态管理器中,当然他们的作用也不同 怎么设置Cookie HttpResponse来响应对象的cookie,设置好对应的视图和路由,只要通过浏览器访问该路由,浏览器就会自动获取到cookie值并存…

关于fetch api这点事

fetchfetch api文档地址模拟登录demofetch api fetch api 是浏览器的异步可跨域请求。基于XMLHttpRequest, 也就是对原生Ajax请求的包装&#xff0c;以回调的形式展开。 使用方法&#xff1a; fetch(http://example.com/movies.json).then(function(response) {return respo…

ChemBioDraw 制作DMT屏保

&#xff5b;关于DMT&#xff5d;二甲基色胺&#xff08;DMT&#xff09; dimethyltryptamine 第一类精神药品&#xff0c;色胺类致幻剂&#xff0c;药性强。不仅存在于植物中&#xff0c;还以痕量见于人体中&#xff0c; 由色胺-N-转甲基酶催化产生&#xff0c;但具体功能不明…

前端学习(1335):mongoDB导入数据

mongoimport --d playground --c users --file ./user.json 运行结果

力扣刷题01

简单版1. 两数求和2. 回文数3. 将整数倒转4. 罗马转整数1. 两数求和 我用的暴力求和。 package top.bitqian.easy.two_sum;import java.util.Arrays; import java.util.LinkedHashMap; import java.util.Map;/*** 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;…

属性被分为八大类不包括_家庭软装八大类有哪些 软装八大类风格有什么特点...

软装就是西方基本装修的硬装完工之后&#xff0c;放置的一些家具以及装饰用品&#xff0c;那么在家装中软装八大类有哪些呢?下面就和郑州装修网小编一起来了解下吧。软装八大类有哪些软装八大类指的是&#xff1a;家具、灯具、布艺、花艺、地毯、工艺品、墙饰以及床品。 1、家…

前端学习(1336):从数据库查询文档

const mongoose require(mongoose); mongoose.connect(mongodb://localhost/playground, { useUnifiedTopology: true }).then(() > console.log(数据库连接成功)).catch(err > console.log(err, 数据库连接失败))//创建集合规则 const courseSchema new mongoose.Sche…

前端学习(1337):mongoDB文档查询

const mongoose require(mongoose); mongoose.connect(mongodb://localhost/playground, { useUnifiedTopology: true }).then(() > console.log(数据库连接成功)).catch(err > console.log(err, 数据库连接失败))//创建集合规则 const courseSchema new mongoose.Sche…

声速的测量的实验原理和应用_创想智控:光学三角测量系统的测量原理与应用...

测量原理是三角测量&#xff1a;将激光线投影到表面上&#xff0c;并从与照相机的投影方向不同的方向进行观察。表面距离的变化会导致相机上成像线的偏移。这意味着传感器正在获取表面轮廓。光学三角测量是一种易于使用的方法&#xff0c;用于测量到物体的距离而不接触它们&…

PHP 5.4 on CentOS/RHEL 7.0, 6.5 and 5.10 via Yum

PHP 5.4.36 has been released on PHP.net on 18th December 2014, and is also available for CentOS/RHEL 5.10 and 6.5 at Webtatic via Yum. Update 2013-07-21 – A new package “php54w-mysqlnd” has been added as an alternative to “php54w-mysql”. This will ins…

仓库移动_移动式RFID仓库管理解决方案,智能仓库未来应用的会更广泛

在当下的仓储物流行业中&#xff0c;尤其在中国&#xff0c;信息化的应用不断的在行业内深化其作用。因为在新的产业环境下和信息技术的背景下&#xff0c;对企业提出了新的要求。客户要实现更加独特的体验&#xff0c;相关企业需要提高仓储作业效率&#xff0c;提高数据的准确…

Github作为maven私服仓库用

上传jar包到GitHub仓库流程打包一个项目本地使用流程 打包一个项目 distribute_id 是自定义的仓库id git_repo_path是本地git仓库的路径&#xff0c;也是存放编译的路径 使用下面的命令编译并打包到本地仓库 mvn deploy -DaltDeploymentRepository${distribute_id}::default:…

前端学习(1338):mongoDB删除文档

const mongoose require(mongoose); mongoose.connect(mongodb://localhost/playground, { useUnifiedTopology: true }).then(() > console.log(数据库连接成功)).catch(err > console.log(err, 数据库连接失败))//创建集合规则 const courseSchema new mongoose.Sche…

MS SQL SERVER数据库简单回顾

MS SQL SERVER数据库 1.创建数据库create database javateam;2.使用数据库use javateam;3.创建表create table 表名 (字段名 字段类型 主键 字段增长&#xff08;从X开始 , 每次加X个&#xff09;,字段名 字段类型,字段名 字段类型);create table peopleNone(pid…

docker绑定端口主机访问curl: (56) Recv failure: Connection reset by peer

这个问题超简单… 我用的nuxt&#xff0c;项目丢到了node容器里面。然后主机访问不了挂载的端口。 容器内是能curl通的。 然后&#xff0c;经过排查&#xff0c;nuxt只指定了127.0.0.1, host必须是0.0.0.0才能暴露。 https://www.nuxtjs.cn/faq/host-port

fl如何保存再次打开_「Excel技巧」Excel2016如何将自己设计的图表存为模板反复使用?...

现在的Excel系统内置的默认图表类型很丰富&#xff0c;各种各样&#xff0c;但好像也还是满足不了大家的需求。很多人会在插入默认图表后&#xff0c;在默认图表的基础上根据自己的需求进行修改。好不容易修改好的图表&#xff0c;能不能把它保存为模板&#xff0c;用来以后调用…

前端学习(1339):mongodb更新数据文档

const mongoose require(mongoose); mongoose.connect(mongodb://localhost/playground, { useUnifiedTopology: true }).then(() > console.log(数据库连接成功)).catch(err > console.log(err, 数据库连接失败))//创建集合规则 const courseSchema new mongoose.Sche…

[REGEX] 匹配任意字符(包括换行符)

[\s|\S]*转载于:https://www.cnblogs.com/bushe/p/4229522.html

java.lang.illegalargumentexception: invalid comparison: java.util.date and java.lang.string

人麻了… <if test"reqVo.startDate ! null and reqVo.startDate ! ">AND DATE_FORMAT(a.createTime, %Y-%m-%d) > #{reqVo.startDate}</if>startDate 是java.util.Date类型 正确&#xff1a; <if test"reqVo.startDate ! null">AND…