第三章

命名空间的using声明

用于指定名字属于哪一个命名空间

using namespace :: name;

注意:头文件不应包含using声明

标准库类型string

这里书上讲的比较简单,主要记录一些注意事项。

  • 在读取操作时,string对象会自动忽略开头的空白(即空格符、制表符、换行符等),并从第一个真正的字符开始读起,直到遇见下一处空白为止
  • 字面值与string对象相加是合法的,但是必须确保每个‘+’的两侧的运行对象至少有一个是string。这是因为c++中的字符串字面值并不是string对象,具有不同的类型。

标准库类型vector

vector表示对象的集合,其中所有的对象拥有相同的类型,该类型由vector严格给出。实际上,vector是一个类模板而非类型。

语法

vector<int> ivec;//iver保存int类型的对象
vector<vector<string>> svec;//其中的元素是vector对象
  • 不存在包含引用的vector
  • 允许嵌套,如vector<vector>,但注意,有些老式编译器需写成vector<vector >,即加一个空格

初始化

注意花括号和圆括号的使用

  • 花括号,表示列表初始化
  • 圆括号说明我们想构造vector对象。

为了提高c++的性能,应该开始的时候创建空的vector对象,随后使用vector.push_back逐步进行添加,注意不能使用下标对空vector对象进行添加。
同样在使用下标操作时要确保下标合法,比如尽量使用范围for语句

迭代器

迭代器的对象是容器中的元素或者string对象中的字符

迭代器的使用

每种拥有迭代器的类型同时也都拥有返回迭代器的成员,如名为begin和end的成员。begin负责返回指向第一个元素或字符的迭代器。end成员则负责返回指向容易或string对象 “尾元素的下一位置”的迭代器。

当容器为空时,begin和end返回的是同一个迭代器。

vector<int> ivec;
vector<int>::iterator iter;
iter=ivec.bengin(); 
vector<int>::iterator iter1 = ivec.end();

迭代器操作

*iter 返回迭代器iter指向的元素的引用
iter->men 对iter进行解引用,获取该元素名为men的成员。等效于(*iter).men
++iter 给iter加1,使其指向容器的下一个元素
--iter 给iter减1,使其指向容器的上一个元素
iter1 == iter2 比较两个迭代器是否相等,当它们指向同一个容器的同一个元素或者都指向同同一个容器的超出末端的下一个位置时,它们相等
iter1 !== iter2

const_iterator与const iteraotr

const_iterator类型的迭代器只能读取容器中的元素,不能用于改变元素值。

而使用const iterato声明时,必须对迭代器进行初始化,而不能改变迭代器值。

vector<int> v{1,2,3,4};
vector<int>::const_iterator a;
a = v.begin();
*a = 0;//非法
const vector<int>::iterator b = v.begin();
*b = 11;//合法
 ++b;	  //非法

同样,begin与end的返回值也依赖迭代器的类型。

在C++11中,还定义了cbegin与cend,其返回值都是const_iterator。

数组

复合类型的数组,从里往外读

posted @ 2024-07-19 19:54  名字好难想zzz  阅读(26)  评论(0)    收藏  举报