标准库类型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++内置数据类型的数组和指针而言,程序员应优先使用标准库类类型

c++ primer 笔记 (三)的更多相关文章

  1. C++ Primer 笔记 第三章

    C++ Primer 第三章 标准库类型 3.1using声明 例: using namespace atd; using std::cin; 3.2string类型 初始化方式 string s1 ...

  2. C++ Primer笔记

    C++ Primer笔记 ch2 变量和基本类型 声明 extern int i; extern int i = 3.14;//定义 左值引用(绑定零一变量初始值,别名) 不能定义引用的引用:引用必须 ...

  3. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  4. 《CMake实践》笔记三:构建静态库(.a) 与 动态库(.so) 及 如何使用外部共享库和头文件

    <CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...

  5. Mastering Web Application Development with AngularJS 读书笔记(三)

    第一章笔记 (三) 一.Factories factory 方法是创建对象的另一种方式,与service相比更灵活,因为可以注册可任何任意对象创造功能.例如: myMod.factory('notif ...

  6. Python 学习笔记三

    笔记三:函数 笔记二已取消置顶链接地址:http://www.cnblogs.com/dzzy/p/5289186.html 函数的作用: 給代码段命名,就像变量給数字命名一样 可以接收参数,像arg ...

  7. 《MFC游戏开发》笔记三 游戏贴图与透明特效的实现

    本系列文章由七十一雾央编写,转载请注明出处. 313239 作者:七十一雾央 新浪微博:http://weibo.com/1689160943/profile?rightmod=1&wvr=5 ...

  8. [Firefly引擎][学习笔记三][已完结]所需模块封装

    原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读:        笔记三主要就是各个模块的封装了,这里贴 ...

  9. JSP学习笔记(三):简单的Tomcat Web服务器

    注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...

  10. 构建高性能WEB站点笔记三

    构建高性能WEB站点笔记三 第10章 分布式缓存 10.1数据库的前端缓存区 文件系统内核缓冲区,位于物理内存的内核地址空间,除了使用O_DIRECT标记打开的文件以外,所有对磁盘文件的读写操作都要经 ...

随机推荐

  1. linux的基本操作与常见命令

    linux的基本操作与常见命令: jdk的安装: 步骤:(特别注意:虚拟机安装的一般是32位的操作系统,jdk也必须使用32位的) 查看虚拟机版本:sudo uname --m i686 //表示是3 ...

  2. 02-MySQL的安装和配置

    1. 软件和环境 注:安装MySQL数据库的操作系统必须保证有.NET环境和VC运行库的支持.    下载地址:百度云网盘链接 2. MySQL服务器安装详细步骤 (1). 选择安装类型 这里我们选择 ...

  3. C 编译过程浅析

    From where i stand, there are two programmig languages in the world, which is C lang and the other. ...

  4. 【输入法】Rime-中州韵 基本设置 附:官方定制指南

    前言 不知不觉就到了年终了,距离上次更新博客已经有一个半月,这段时间天天在加班,也没作一下新的学习计划,趁着元旦放假,写一点好玩的东西,这次要记录的是一点关于Rime相关的东西,文章本身不会长,只是说 ...

  5. Java——Struts2 crud 简单实例(学习struts2和ssh) 用Myeclipse实现

    1.new web project 2.给新建的web项目添加struts2支持 3.项目结构中有了struts.xml和struts2核心库 4.编码 4.1项目结构图 4.2源代码: (1)DbU ...

  6. VS2013中修改MFC对话框左上角和exe图标

    一.开发环境 1.VS2013: 2.C++ / MFC: 二.更改步骤 1)创建一个新工程,可以什么都不加.打开“资源视图”, 右键点击项目名称,选择“添加资源”,导入“Icon”资源文件(事先准备 ...

  7. asp.net 使用一般处理程序和ajax post实现登录以及记住密码

    1.登录页面login.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeBehind=&qu ...

  8. Java EE之Struts2路径访问小结

    一.项目WEB视图结构 注释:struts.xml:最普通配置,任何无特殊配置 二.访问页面 1.访问root.jsp //方式1: http://localhost/demo/root.jsp // ...

  9. 用winhotkey添加属于自己的快捷键

    需求 我要使用Win+N快捷键组合打开指定某个文件! 使用方法 打开winhotkey软件,做以下操作: 此刻,就可以用Win+N组合快捷键来打开指定目录了!

  10. D - Maximizing Advertising

    题目链接:https://cn.vjudge.net/contest/250168#problem/D 题目大意:给你一些点的坐标,这些点属于两个帮派,让你将这些点分进两个不能重叠的矩形中,问你最多两 ...