标准库类型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

c++ primer 笔记 (三)相关推荐

  1. C++ Primer 第三版 读书笔记

    1.如果一个变量是在全局定义的,系统会保证给它提供初始化值0.如果变量是局部定义的,或是通过new表达式动态分配的,则系统不会向它提供初始值0 2.一般定义指针最好写成:" string * ...

  2. C++Primer笔记——拷贝控制

    CHAPTER13-拷贝控制(C++ Primer笔记) 13.1 拷贝.赋值与销毁 13.1.1 拷贝构造函数 13.1.2 拷贝赋值运算符 13.1.3 析构函数 13.1.4 三/五法则 13. ...

  3. J2EE学习笔记三:EJB基础概念和知识 收藏

    J2EE学习笔记三:EJB基础概念和知识 收藏 EJB正是J2EE的旗舰技术,因此俺直接跳到这一章来了,前面的几章都是讲Servlet和JSP以及JDBC的,俺都懂一些.那么EJB和通常我们所说的Ja ...

  4. tensorflow学习笔记(三十二):conv2d_transpose (解卷积)

    tensorflow学习笔记(三十二):conv2d_transpose ("解卷积") deconv解卷积,实际是叫做conv_transpose, conv_transpose ...

  5. Ethernet/IP 学习笔记三

    Ethernet/IP 学习笔记三 原文为硕士论文: 工业以太网Ethernet/IP扫描器的研发 知网网址: http://kns.cnki.net/KCMS/detail/detail.aspx? ...

  6. 深度学习入门教程UFLDL学习实验笔记三:主成分分析PCA与白化whitening

     深度学习入门教程UFLDL学习实验笔记三:主成分分析PCA与白化whitening 主成分分析与白化是在做深度学习训练时最常见的两种预处理的方法,主成分分析是一种我们用的很多的降维的一种手段,通 ...

  7. AT91RM9200Linux移植笔记(三)-移植Linux kernel 2.6.17

    AT91RM9200Linux移植笔记(三)-移植Linux kernel 2.6.17 手上板子原来自带的是2.4.19的内核, 打算移植新的2.6的内核,从网上下了2.6.17的kernel,下载 ...

  8. iView学习笔记(三):表格搜索,过滤及隐藏列操作

    iView学习笔记(三):表格搜索,过滤及隐藏某列操作 1.后端准备工作 环境说明 python版本:3.6.6 Django版本:1.11.8 数据库:MariaDB 5.5.60 新建Django ...

  9. 吴恩达《机器学习》学习笔记三——多变量线性回归

    吴恩达<机器学习>学习笔记三--多变量线性回归 一. 多元线性回归问题介绍 1.一些定义 2.假设函数 二. 多元梯度下降法 1. 梯度下降法实用技巧:特征缩放 2. 梯度下降法的学习率 ...

  10. mysql数据库权威指南_MySQL_MySQL权威指南读书笔记(三),第二章:MYSQL数据库里面的数 - phpStudy...

    MySQL权威指南读书笔记(三) 第二章:MYSQL数据库里面的数据 用想用好MYSQL,就必须透彻理解MYSQL是如何看待和处理数据的.本章主要讨论了两个问题:一是SQL所能处理的数据值的类型:二是 ...

最新文章

  1. 2017 3月16日,上午
  2. MS SQL入门基础:移动数据库
  3. 常见网络游戏同步方式
  4. 很多人都不知道学了c/c++到底能做什么?让大牛来告诉你............
  5. TensorFlow书籍
  6. Office文件嵌入特殊字体
  7. 旷视Face++与西交大成立AI联合实验室,郑南宁孙剑再续师徒缘
  8. 微信微调助手WeChatTweak for mac(微信多开和防撤回工具)最新版
  9. 帐号 快速看图cad_CAD快速看图
  10. HiJson——Json解析工具
  11. linux 小度 驱动_小度WiFi怎么安装 小度WiFi驱动安装
  12. 并行计算、分布式计算、集群计算和网格计算的介绍,以及主要有哪些区别?
  13. 事件循环、webpack、vue<前端学习笔记>
  14. (运存扩展器)Android手机内存扩展软件RAMEXPANDER使用教程
  15. CSS calc无效
  16. c语言写抢QQ红包软件,Android实现QQ抢红包插件
  17. 在更改计算机的设置路由器,怎么改路由器wifi密码 怎么修改路由器wifi密码
  18. text/css什麼意思
  19. Salesforce ADM201考题大全
  20. CListCtrl 灰白相间实现

热门文章

  1. vue里写三元判断绑定class和style
  2. Taro+react开发(57) 图片引入
  3. WangEdit富文本编辑器增加上传视频功能
  4. [html] 你最喜欢H5的哪些功能?为什么?
  5. [css] 让网页的字体变得清晰,变细用CSS怎么做?
  6. [css] 如何写高效的CSS?
  7. 工作303:接口返回的上传地址默认是可以调用的
  8. 前端学习(2580):提升开发效率的工具
  9. 前端学习(2269)vue造轮子之添加icon
  10. 前端学习(1258):then参数中的函数返回值