c++ primer---读书笔记3

来源:互联网 发布:cok服务端账号数据在哪 编辑:程序博客网 时间:2024/05/20 07:13

抽象数据类型:重要的两种

string   长度可变字符串

vector   保存一组指定类型的对象

bitset   进行方便的位操作

 

注意:通常头文件中只定义需要的东西。

 

using声明 声明一次只能作用于一个命名空间的成员

例子:using std::cin;

 

1. string

string四种初始化:

string s1;

string s2(s1);

string s3("value");

string s4(n, 'c');

 

通过getline函数读取整行文本,getline(cin, line)

 

一般而言,避免使用using指示而使用using声明。避免由于引入多个库导致名字冲突。

 

string的操作:

s.empty() s.size() s[n] s1+s2 s1=s2 v1 == v2 != < <= > >=

 

注意:size操作结果的变量必须为string::size_type。它是一个unsigned类型的。

特别注意size返回值不要赋给int变量。(可能越界)

 

注意+操作符的左右数至少要有一个是string类型的。

string s2 = "world";

string s6 = "hello" + "," +s2;

 

可以进行下标操作,下标操作可以用做左值。s6[1]='*';

 

cctype头文件中定义了各种字符操作函数。

 

2.vector

vector可以称为容器,包含其他对象。但对象必须是同一类型。

 

注意:vector不是数据类型,而是类模板;但是vector<int>和vector<string>是数据类型。

vector四种初始化:

vector<T> v1;

vector<T> v2(v1);

vector<T> v3(n, i);

vector<T> v4(n);

 

虽然可以对给定元素个数vector预先分配内存,但更有效的是先初始化一个空vector对象,然后再动态追加元素。

 

注意:必须是已经存在的元素才能进行下标操作进行索引。下标操作赋值,不会添加任何元素。

另外还可以用迭代器进行访问。

 

所有标准库容器都提供了迭代器,只有少数支持下标操作。

 

迭代器:若一种类型支持一组确定的操作(这些操作可以用来遍历容器内元素,并访问这些元素的值),我们称

之为迭代器。

 

每种容器都定义了begin和end函数用来返回迭代器。begin返回首个,end返回最后一个的下一个。

*解引用操作符。

iterator  const_iterator只读iterator

const iterator同const_iterator区别;前者不可遍历元素,后者不能改变元素的值。

 

 

3.bitset类型

#include<bitset>

初始化

bitset<n> b;

bitset<n> b(u);       数字初始化

bitset<n> b(s);       字符串初始化,读取顺序从右往左

bitset<n> b(s, pos, n); 字符串初始化。

 

总结: 相对于数组和指针,应优先使用标准库类型。

注意:任何改变vector长度的操作都会使iterator失效。调用push_back后就不能信赖vector的值了。