一.string
 
 #include <string>
 using std::string
 
 初始化函数:
 
 string s1;        默认构造函数 s1 为空串
 string s2(s1);   将 s2 初始化为 s1 的一个副本
 string s3("value");将 s3 初始化为一个字符串字面值副本
 string s4(n, 'c');将 s4 初始化为字符 'c' 的 n 个副本    string s4(5,'6')  66666
 为了与 C 语言兼容,字符串字面值与标准
 库 string 类型不是同一种类型。
 
 
 cin >> s;
 从标准输入读取 string 并将读入的串存储在 s 中。string 类型的输入操 作符:
 • 读取并忽略开头所有的空白字符(如空格,换行符,制表符)。
 • 读取字符直至再次遇到空白字符,读取终止。
 
 读入未知数目的string对象《每行输出一个单词》
 string str;
 while (cin>>str) {
 cout<<str<<endl;
 }
 
 使用getline读取正行文本《每次输出一行文本》
 string line;
 while (getline(cin,line)) {
 cout<<line<<endl;
 }
 
 字符串操作符
 
 s.empty()
 如果 s 为空串,则返回 true,否则返回 false。
 
 s.size()
 返回 s 中字符的个数  返回类型:string::size_type。
 
 s[n]
 返回 s 中位置为 n 的字符,位置从 0 开始计数
 
 s1 + s2
 把 s1 和 s2 连接成一个新字符串,返回新生成的字符串
 
 s1 = s2
 把 s1 内容替换为 s2 的副本
 
 v1 == v2
 比较 v1 与 v2 的内容,相等则返回 true,否则返 回 false
 
 !=,<,<=,>,and>
 保持这些操作符惯有的含义
 #include<CCType.h>
 
 cctype 中的函数
 isalnum(c)
 isalpha(c)
 iscntrl(c)
 isdigit(c)
 isgraph(c)
 islower(c)
 isprint(c)
 ispunct(c)
 isspace(c)
 isupper(c)
 isxdigit(c)
 tolower(c)
 toupper(c)
 如果 c 是字母或数字,则为 True。 
 如果 c 是字母,则为 true。
 如果 c 是控制字符,则为 true 
 如果 c 是数字,则为 true。
 如果 c 不是空格,但可打印,则为 true。 
 如果 c 是小写字母,则为 true。
 如果 c 是可打印的字符,则为 true。 
 如果 c 是标点符号,则 true。
 如果 c 是空白字符,则为 true。
 如果 c 是大写字母,则 true。
 如果是 c 十六进制数,则为 true。
 如果 c 大写字母,返回其小写字母形式,否则直接返回 c。 
 如果 c 是小写字母,则返回其大写字母形式,否则直接返回 c。
 
 
 建议采用 C 标准库头文件的 C++ 版本,
 #include <cctype>   C建议采用此版本
 #include <ctype.h>  C++
 -------------------------------------------------
 
二.vector 是同一种类型的对象的集合
 #include<vector>
 using std::vector;
 
 
 vector<int>  ivec;//vector不是一种数据类型,而是一种类模板,vector<int>是一种数据类型
 初始化
 
 vector<T> v1;
 vector 保存类型为 T 对象。
 默认构造函数 v1 为空。
 
 vector<T> v2(v1); 
 v2 是 v1 的一个副本。
 
 
 vector<T> v3(n, i);
 v3 包含 n 个值为 i 的元素。
 
 
 vector<T> v4(n); vector<int>v4(10);
 v4 含有值初始化的元素的 n 个副本。10 elements, each initialized to 0
 
 
 vector 对象的操作
 vector 标准库提供了许多类似于 string 对象的操作
 v.empty()
 如果 v 为空,则返回 true,否则返回 false。
 
 v.size()
 返回 v 中元素的个数。vector<int>::size_type  num;
 
 
 v.push_back(t)
 在 v 的末尾增加一个值为 t 的元素。
 
 v[n]
 返回 v 中位置为 n 的元素。
 
 v1 = v2
 把 v1 的元素替换为 v2 中元素的副本。
 
 v1 == v2
 如果 v1 与 v2 相等,则返回 true。
 
 !=, <, <=,
 >, and >=
 保持这些操作符惯有的含义
 
 关键概念:安全的泛型编程
 习惯于 C 或 Java 编程的 C++ 程序员可能会觉得难以理解,for 循环 的判断条件用 != 而不是用 < 来测试 vector 下标值是否越界。C 程序 员难以理解的还有,上例中没有在 for 循环之前就调用 size 成员函数 并保存其返回的值,而是在 for 语句头中调用 size 成员函数。
 C++ 程序员习惯于优先选用 != 而不是 < 来编写循环判断条件。在上例 中,选用或不用某种操作符并没有特别的取舍理由。学习完本书第二部 分的泛型编程后,你将会明白这种习惯的合理性。
 调用 size 成员函数而不保存它返回的值,在这个例子中同样不是必需 的,但这反映了一种良好的编程习惯。在 C++ 中,有些数据结构(如 vector)可以动态增长。上例中循环仅需要读取元素,而不需要增加新 的元素。但是,循环可以容易地增加新元素,如果确实增加了新元素的 话,那么测试已保存的 size 值作为循环的结束条件就会有问题,因为 没有将新加入的元素计算在内。所以我们倾向于在每次循环中测试 size 的当前值,而不是在进入循环前,存储 size 值的副本。
 我们将在第七章学习到,C++ 中有些函数可以声明为内联(inline)函 数。编译器遇到内联函数时就会直接扩展相应代码,而不是进行实际的 函数调用。像 size 这样的小库函数几乎都定义为内联函数,所以每次 循环过程中调用它的运行时代价是比较小的。
 每种容器类型都定义了自己的迭代器类型,用于访问容器内的元素,即,每个容器都定义了一个自己的 iterator
 如 vector:
 vector<int>::iterator iter;
 
 1.begin()/  end()
 
 for (vector<int>::iterator iter = text.begin();iter != text.end() ; iter++) {
 *iter = 4;
 
 }
 
 
 只能读取容器内元素,但是不可以改变
 vector<int>::const_iterator
 
 
 2.算数操作
 iter + n;
 iter1-iter2  defference_type
 
 三.bitset
 
 #include<bitset>
 using std::bitset;
 
 初始化
 bitset<n> b;   // b 有 n 位,每位都 0  bitset<32> b;
 
 bitset<n> b(u);//  b 是 unsigned long 型 u 的一个副本 bitset<32> b(0xffff); 
 // bits 0 ... 15 are set to 1, 16 ... 31 are 0
 
 
 bitset<n> b(s); // b 是 string 对象 s 中含有的位串的副本
 string strval("1100");
 bitset<32> bitvec4(strval);//从 string 对象读入位集的顺序是从右向左(from right to left):bitvec4 的位模式中第 2 和 3 的位置为 1,其余位置都为 0。如果 string 对 象的字符个数小于 bitset 类型的长度,则高阶位置为 0。
 
 
 
 
 bitset<n> b(s, pos, n);//b 是 s 中从位置 pos 开始的&nbps;n 个位的副
 string str("1111111000000011001101");
 bitset<32> bitvec5(str, 5, 4); // 4 bits starting at str[5], 1100
 
 位操作
 b.any() b 中是否存在置为 1 的二进制位?
 
 b.none() b 中不存在置为 1 的二进制位吗?
 
 
 b.count() b 中置为 1 的二进制位的个数
 
 
 b.size() b 中二进制位的个数
 
 
 b[pos] 访问 b 中在 pos 处二进制位
 
 
 b.test(pos) b 中在 pos 处的二进制位置为 1 么?
 
 
 b.set() 把 b 中所有二进制位都置为 1
  
 b.reset()            把所有二进制位设为0
 
 
 b.set(pos)      把 b 中在 pos 处的二进制位置为 1
 
 
 flip 操作可以对 bitset 对象的所有位或个别位取反:
 bitvec.flip(0);   // reverses value of first bit
 bitvec[0].flip(); // also reverses the first bit
 bitvec.flip();    // reverses value of all bits

												

C++ Primer学习笔记2--c++标准库中的 vector、string 和 bitset 类型的更多相关文章

  1. Python学习笔记8:标准库之正則表達式

    Python拥有强大的标准库.从如今起,開始学习标准库中提供的一些经常使用功能. 首先看正則表達式(regular expression),它的主要功能是从字符串(string)中通过特定的模式(pa ...

  2. Python学习笔记13:标准库之子进程(subprocess包)

    ubprocess包主要功能是运行外部的命令和程序.从这个意义上来说,subprocess的功能与shell类似. subprocess以及经常使用的封装函数 当我们执行python的时候,我们都是在 ...

  3. C++ Primer学习笔记(三) C++中函数是一种类型!!!

    C++中函数是一种类型!C++中函数是一种类型!C++中函数是一种类型! 函数名就是变量!函数名就是变量!函数名就是变量! (---20160618最新消息,函数名不是变量名...囧) (---201 ...

  4. python基础教程_学习笔记14:标准库:一些最爱——re

    标准库:一些最爱 re re模块包括对正則表達式的支持,由于以前系统学习过正則表達式,所以基础内容略过,直接看python对于正則表達式的支持. 正則表達式的学习,见<Mastering Reg ...

  5. python基础课程_学习笔记15:标准库:有些收藏夹——fileinput

    标准库:有些收藏夹 fileinput 重要功能 性能 叙述性说明 input([files[,inplace[,backup]]) 便于遍历多个输入流中的行 filename() 返回当前文件的名称 ...

  6. python基础课程_学习笔记13:标准库:有些收藏夹——sys

    标准库:有些收藏夹 sys sys这个模块可以让你访问和python解释器联系紧密的变量和函数. sys模块中一些重要的函数和变量 函数/变量 描写叙述 argv 命令行參数,包含脚本名称 exit( ...

  7. Python学习笔记16:标准库多线程(threading包裹)

    Python主要是通过标准库threading包来实现多线程. 今天,互联网时代,所有的server您将收到大量请求. server要利用多线程的方式的优势来处理这些请求,为了改善网络port读写效率 ...

  8. python基础课程_学习笔记20:标准库:有些收藏夹——os

    标准库:有些收藏夹 os os模块为您提供访问多个操作系统服务特征. os和它的子模块os.path还包含一些用于检查.构造.删除文件夹和文件的函数,以及一些处理路径的函数. os模块中一些重要函数和 ...

  9. python基础教程_学习笔记19:标准库:一些最爱——集合、堆和双端队列

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/signjing/article/details/36201499 标准库:一些最爱 集合.堆和双端队 ...

随机推荐

  1. 转: 用css把图片转为灰色图

    小tip: 使用CSS将图片转换成黑白(灰色.置灰) by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.co ...

  2. 设计模式总结6--适配器模式 adapter pattern

    适配器模式将一个类的接口,转化成客户期望的另一个接口,适配器让原本接口不兼容的类可以合作无间 public interface Sheep{ public void run(); public voi ...

  3. 用 PS 调整服务器时间

    用 PS 调整服务器时间 Powershell 有一个命令用来调整计算机的时间, Set-Date -Adjust,但是,只能调整本地时间,不能调整远程的计算机时间. function AdjustD ...

  4. iOS UIWebView 之 UIProgressView

    之前做等待跳转都是用UIActivityIndicatorView ,后来做webView 加载页面的时候,发现了一个特别好用又超级炫酷的加载提示NJKWebViewProgress,作者巧妙的通过计 ...

  5. linux 修改IP, DNS 命令

    linux 修改IP, DNS 命令 http://www.cnblogs.com/fighter/archive/2010/03/04/1678007.html 修改DNS [root@localh ...

  6. JavaScript弹出框

    confirm(str); 参数说明: str:在消息对话框中要显示的文本 返回值: Boolean值 返回值: 当用户点击"确定"按钮时,返回true 当用户点击"取消 ...

  7. C#注册表

    C#注册表情缘   记得当时刚接触C#的时候,喜欢编写各种小软件,而注册表系列和网络系列被当时的我认为大牛的必备技能.直到我研究注册表前一天我都感觉他是那么的高深. 今天正好有空,于是就研究了下注册表 ...

  8. 在springmvc中controller的一个方法处理多个不同请求

    value的uri值为以下三类: A) 可以指定为普通的具体值: B)  可以指定为含有某变量的一类值(URI Template Patterns with Path Variables): @Req ...

  9. perl 5.22手动安装Mysql DBI和DBD

    mysql 手动安装DBI 和DBD: DBI版本: [root@dr-mysql01 DBD-mysql-4.033]# perl -MDBI -le 'print $DBI::VERSION;' ...

  10. 制作Linux(Fedora、Ubuntu、CentOS)优盘启动

    随着嵌入式技术的快速发展,Linux快速发展过一段时间.虽然现在不是很热,但是linux在现实社会的使用还是很有用处.而光盘有有些落伍,不仅浪费而且不环保,所以质优价廉的优盘就脱颖而出.所以,用优盘制 ...