每日复习笔记4.21
C++复习笔记
c++ primer笔记
vector类型
- 序言
vector是同一类型的对象的集合,每个对象都有一个对应的整数索引值。这一点和数组十分地相似,但是个人认为vector就是一个长度可变的数组。vector是要给类模板,具体后面再具体说。
2.vector对象的定义和初始化
方式 | 含义 |
---|---|
vector v1 | vector保存类型为T的对象,默认构造函数v1为空 |
vector v2(v1) | 将v2初始化为v1的副本(可以用一个vector对象初始化另一个) |
vector v3(n,i) | v3中包含n个值为i的T类型的元素 |
vector v4(n) | v4含有值为默认初始化值的n个T类型的元素 |
vector<int> ivec1; //一个数据类型为int的空的vector
vector<int> ivec2(ivec1); //将ivec2初始化为ivec1的副本
vector<string> svec(ivec); //error,svec和ivec所包含的数据类型不同
vector<int> ivec(10,-1); //一个vector对象,包含了十个值为-1的元素
vector<string> svec(10,"hi!"); //一个vector对象,包含了十个值为“hi!”的元素
vector对象的重要属性就在于可以再运行时高效的添加元素,相比之下数据在运行时是不能改变数组中元素的个数的。
- vector对象的操作
操作 | 含义 |
---|---|
v.empty() | 如果v为空,则返回true,否则返回false |
v.size() | 返回v中元素的个数 |
v.push_back(t) | 在v的末尾增加一个值为t的元素 |
v[n] | 返回v中下标为n的元素,注意vector中下标从0开始 |
v1 = v2 | 将v1中的元素替换成v2中元素的副本 |
v1 == v2 | 如果v1和v2相等,则返回true |
!=,<,<=,>,>= | 保持原有的含义 |
1)size()函数
关于size()函数需要注意一点的是它的返回值类型,这个size_type类型和vector类型中元素的类型有关。即:
vector<int>::size_type //OK
vector::size_type //error
2)向vector中添加元素
push_back函数是向vector对象的末尾添加元素
//使用push_back函数向一个vector对象的末尾添加元素
string word;
vector<string> text; //建立一个数据类型为string的空vector对象
while(cin >> word){
text.push_back(word); //每次从标准输入中读取数据存入text的末尾
}
3)下标操作
我们不能通过下标操作向vector对象中添加元素。使用下标操作时,下标只能用于获取已经存在的元素。
迭代器iterator
除了通过下标操作访问容器(其中vector也是容器的一种)内的元素之外,也可以通过使用迭代器的方式或许或者遍历容易中的元素。
- 容器的迭代器iterator类型
一般来说迭代器的类型也是和容器本身的类型是有关系的
vector<int>::iterator iter //OK
vector::iterator iter //error
这意味着每一种容易都定义了属于自己的迭代器类型。
-
begin和end操作
每种迭代器分别定义了一对名为begin和end的函数,用于返回迭代器。其中begin返回的迭代器指向容器的第一个元素;而end返回的迭代器指向容器中的末端元素的下一个位置。
实际上end操作返回的迭代器不指向容器中的任何一个实际的元素,而只是起到一个哨兵的作用,指示已经处理完了容器中的所有元素。 -
vector迭代器的自增和解引用操作
迭代器类型可以使用解引用操作符(*操作符)来访问迭代器所指向的元素。
//将迭代器iter所指向的元素赋值为0
*iter = 0;
vector<int> ivec(5,-1);
vector<int>::iterator iter = ivec.bgein();
*iter == ivec[0]; //TRUE
这里说明*iter和ivec[0]指向的是同一个元素。
关于自增操作
如果对一个迭代器u低昂进行自增操作,则是把容器中的迭代器“向前移动一个位置”,如果迭代器iter指向第一个元素,++iter则指向第二个元素。
需要注意的是,由于end操作所返回的迭代器并不只想容易中的任何一个元素,所以不能对它使用解引用操作和自增操作。
- 关于迭代器的比较操作(==和!=)
简单来说,如果两个迭代器对象指向同一个元素,则他们想等,否则不想等。