您的位置:首页 > 编程语言 > C语言/C++

《c++ primer》学习笔记 第三章 标准库类型(string, vector,bitset)

2014-04-29 00:06 886 查看
《c++ primer》学习笔记 第三章 标准库类型(string, vector,bitset)

(1)关于getline()函数

getline()有两个原型:

(1)istream& getline (istream& is, string& str, char delim);
(2)istream& getline (istream& is, string& str);
表示读取输入流对象is中的内容存储到字符串str中,直到遇到delim符号时终止,如果没有指定delim则直到遇到换行符(‘\n’)时终止(2)。

其中:is是输入流对象,通常为cin或文件流ifstream; str为储存输入内容的字符串,delim为输入终止符。

example:

// extract to string

#include <iostream>

#include <string>

main ()

{

std::string name;

std::cout << "please, enter your full name: ";

std::getline (std::cin,name);

std::cout << "hello, " << name << "!\n";

return 0;

}

(2)string::size_type类型

string的size()函数的返回值也该是size_type类型,size_type是一个与机器无关的unsigned(unsigned int或unsigned long)类型。同样的位数,unsigned值是signed值的两倍,从这个角度来说,将size()的返回值赋给size_type比赋给int重要安全的多。将size()返回值赋给int时,很有可能会超出其表示范围。如,在16位int型机器上,int能表示的最大值为215=32767,而一个文件的字符数可以很轻松的超过这个值。

在定义用作索引的变量时,出于同样的道理,string 对象的索引变量最好也用 string::size_type 类型。因此在遍历string对象的字符时有:

for(string::size_type ix=0; ix!=str.size(); ++ix)

str[ix] = “*”;

与string类类似,vector对象的size()函数的返回值也是size_type类型。不过,vector 类型总是包括总是包括 vector 的元素类型。如:

vector<int>::size_type; // ok

vector::size_type; //error



(3)两个string对象相加, 和 字符串字面值连接

两个string对象相加可以用“+”、“+=”,如: string s1, s2; string str = s1+s2; str +=s1;

而两个字面值连接时去不能直接使用”+”: string str = “hello” + “world”; // error

原因是string类定义了operate+ 操作符,而字符数组没有。但字面值与字符串连接时,请确保在“+”号的两边至少有一个是string对象。当然,一下的语句也是正确的:

string str = s1 + “hello” + “world”;

因为string类的+操作符返回的是一个string对象,因此s1+”hello”返回一个string,再跟字面值”world”相加是可以的。



(4) string对象中字符的处理函数

i1




(5)迭代器iterator,const_iterator, const iterator

迭代器是一种检查容器内元素并遍历元素的数据类型。标准库为每一种标准容器(包括 vector)定义了一种迭代器类型。迭代器

类型提供了比下标操作更通用化的方法:所有的标准库容器都定义了相应的迭代器类型,而只有少数的容器支持下标操作。因为迭代器对所有的容器都适用,现代 c++ 程序更倾向于使用迭代器而不是下标操作访问容器元素,即使对支持下标操作的 vector 类型也是这样。

迭代器的应用举例:

// reset all the elements in ivec to 0

for (vector<int>::size_type ix = 0; ix != ivec.size(); ++ix)

ivec[ix] = 0;

const_iterator: 每种容器类型还定义了一种名为 const_iterator的类型,该类型只能用于读取容器内元素,但不能改变其值。

const 迭代器: 这种类型几乎没什么用处:一旦它被初始化后,只能用它来改写其指向的元素,但不能使它指向任何其他元素。

vector<int>::const_iterator; // an iterator that cannot write elements

const vector<int>::iterator; // an iterator whose value cannot change



(6) 标准库bieset

有些程序要处理二进制位的有序集,每个位可能包含 0(关)1(开)值。位是用来保存一组项或条件的 yes/no 信息(有时也称标志)的简洁方法。标准库提供的 bitset 类简化了位集的处理。

bitset对象上的操作:

i2


i3


关于bitset的使用,见日后总结。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: