3.3 标准库的vector 类型
vector 是同一类型的对象的集合,每个对象都有一个对应的索引值。和string对象一样,标准库将负责管理与存储元素相关的内存。我们把vector称为容器,是因为他可以包含其他对象。一个容器中所有的独享必须是同一种类型的。
使用vector之前,必须包含相应的头文件:
#include <vector>
using std::vector;
vector 是一个类模板(class template)。使用模板可以编写一个函数或类定义,而用于多个不同的数据类型。
声明从类模板产生的某种类型的对象,需要提供附加信息,信息的种类取决于模板。以vector为例,必须说明vector保存何种对象的类型,通过将类型放在类模板名称后面的尖括号中来指定类型:
vector <int> ivec;
上面的定义,类型是vector<int>,该类型即使含有若干int类型对象的vector ,变量名为ivec。
注意: vector 不是一种数据类型,而只是一个类模板,可以用来定义任意多种数据类型。vector类型的每一种都指定了其保存元素的类型。因此,vector<int>和vector<string>都是数据类型。
3.3.1 vector 对象的定义和初始化
vector定义了好几种类型的构造函数,用来定义和初始化vector对象。
1.创建确定个数的元素
关键概念:vector对象的动态增长
vector 对象的重要属性就在于可以在运行时高效地添加元素。因为vector 的增长效率高,当元素值已知的时候,最好是通过动态的向它添加元素来让它增长。
虽然,可以对给定元素个数的vector对象预先分配内存,但是更有效的方法是先初始化一个空的vector对象,然后再动态地增加内存。
3.3.2 vector 对象的操作
1.vector对象的size
成员函数 size返回相应vector类定义的size_type的值。和string类似。
2.向vector添加元素
push_back() 操作接受一个元素值,并将它作为一个新的元素添加到vector对象的后面。
也就是插入(push)到vector对象的后面(back)。
string word;
vector <string > text;
while(cin>>word){
text.push_back(word);
}
3.vector 的下标操作
vector 的下标操作类似于string。但是,下标操作不能添加元素,只能用vector 的push_back来进行元素的添加。下标操作只能针对已经存在的元素。
注意:安全的泛型编程
习惯于c或者java的程序员可能觉得在对vector操作中,for循环的判断条件用!=而不是大于或者小于号来判断难以理解。
调用size成员函数而不是保存它返回的值是一种良好的编程习惯。在C++中有些数据结构(如vector)可以动态的增长。循环可以很容易的增加新元素,如果确实增加了新元素的话,,那么测试已经保存的size值作为循环结束的条件就会有问题。所以我们倾向于,在每次循环中测试size 的当前值,而不是在循环之前就将他保存下来。
警告:仅能对确知已存在的元素进行下标操作
3.4 迭代器(iterator)
迭代器是一种检查容器内元素并遍历元素的数据类型。
标准库为每一种标准容器都定义了一种迭代器类型。迭代器提供了比下标操作更通用化的方法:所有的标准库都定义了相应的迭代器类型,而只有少数的容器支持下标操作。
1.容器的iterator类型
每种容器都定义了自己的迭代器类型如:vector:
vector <int >::iteractor iter;
上面这条语句定义了一个名为iter的变量,他的数据类型是由vector <int>定义的iteractor 类型,这里的iteractor与迭代器实际类型含义相同。
2.begin和end操作
每种容器都定义了一堆名为begin和end 的函数,用于返回迭代器。
如果容器内有元素的话,由begin返回的迭代器指向的是第一个元素。
vector <int >::iteractor iter=ivec.begin();
上述语句吧iter初始化为由名为begin的vector操作返回的值。假设vector不为空,初始化后,iter 即指该元素为ivec[0];
由end 操作返回的迭代器指向vector的“末端元素的下一个”。通常称为“超出末端迭代器”,表明他指向了一个不存在的元素,如果vector为空,begin返回的迭代器和end 返回的迭代器相同。
注解:由end 操作返回的迭代器并不指向vector中的任何实际元素,相反它只是起一个哨兵的作用,表示我们已经处理完vector中所有的元素。
3。vector 迭代器的自增和解引用运算
迭代器类型可以使用解引用操作符(* 操作符)来访问迭代器指向的元素:
* iter=0;
解引用操作符返回迭代器当前所指向的元素。假设iter指向vector对象的第一个元素,那么*iter和和ivec就是指向同一个元素。上面这个语句就是的效果就是把这个元素赋值为0;
++iter,自增运算,将iter指向的位置下移一个。岁end操作返回的迭代器不能进行自增和解引用操作。
分享到:
相关推荐
根据给定的信息,“c++ primer笔记”主要围绕经典著作《C++ Primer》展开,这是一本深受程序员喜爱的书籍,旨在帮助读者系统地学习和掌握C++编程语言的基础及高级特性。下面将从几个关键方面对C++的核心知识点进行...
此外,C++ Primer 笔记还会涉及到标准库的使用,如STL(Standard Template Library),包括容器(如vector、list、set、map等)、迭代器、算法(如排序、查找等)和函数对象(functors)。熟悉STL能显著提升C++...
### C++ Primer 读书笔记概览 #### 操作系统与主函数 - **主函数返回值的意义**:操作系统依据`main`函数返回的值来判定程序执行的状态,其中,0值意味着程序成功运行至结束。非零返回值,具体含义由操作系统定义...
C++是一门强大的编程语言,其包含了...以上就是C++ Primer学习笔记中涵盖的一些主要知识点。通过这些知识点的学习,可以帮助我们深入理解C++语言的核心概念和编程范式,从而编写出更加高效、安全和可维护的C++代码。
笔记会详细介绍容器(如vector、list、set和map)、迭代器、算法和函数对象,这些工具能极大地提高开发效率。 最后,笔记可能会涵盖C++11及后续版本的新特性,如智能指针(shared_ptr、unique_ptr和weak_ptr)、...
本篇学习笔记主要涵盖了前三章的内容,重点关注STL(Standard Template Library,标准模板库)中的容器、特别是vector的使用,以及迭代器的概念。接下来我们将详细探讨这些知识点。 首先,STL是一个强大的工具集,...
7. **STL(标准模板库)**:STL是C++的一个重要组成部分,包括容器(如vector、list、map)、迭代器、算法和函数对象。学习STL能提高代码效率和可读性。 8. **模板**:模板是C++的泛型编程工具,可以创建泛型函数和...
以上是C++ Primer第四版学习笔记中涉及的一些核心知识点。这些知识点涵盖了C++编程的基础语法、数据类型、容器、指针、内存管理以及控制结构等多个方面,对于初学者理解和掌握C++语言具有重要意义。希望这些内容能够...
4. **容器与迭代器**:这部分内容涉及STL的核心组件,如vector、list、deque、set、map等容器,以及用于遍历容器的迭代器。它们提供了高效的数据存储和操作方式。 5. **算法**:介绍了STL中的各种算法,如排序...
### 《C++ Primer》学习笔记(27)顺序容器 #### 9.1 顺序容器概述 在C++中,顺序容器是一类用于存储数据的容器,其中元素的位置依赖于其添加到容器中的顺序。这与关联容器形成了对比,关联容器中的元素位置是由其...
《C++ Primer 4th 笔记》 ...这些笔记涵盖了C++的基础知识,包括预处理、异常处理、容器、迭代器以及编译环境的使用,是学习C++的重要参考资料。理解并熟练运用这些概念将有助于提升C++编程技能。
4. **标准库**:介绍STL(Standard Template Library)的核心组件,如容器(如vector、list、set、map等)、迭代器、算法和函数对象。 5. **指针与引用**:详述指针的概念,指针运算,动态内存管理,引用作为安全的...
STL是C++中一个强大的工具集,它包括容器(如vector、list、set、map等)、迭代器、算法和函数对象。容器可以存储和管理元素集合,迭代器用于遍历容器中的元素,算法如排序、查找等可以应用于容器,函数对象则可以...
STL是C++库的一部分,包含容器(如vector、list、set)、迭代器、算法和函数对象等组件,极大地提高了开发效率。 这份《C++ Primer 学习笔记》详细解释了以上知识点,并可能还包括了实践示例和习题解答,对于C++的...
- **迭代器**:`begin()` 返回指向向量第一个元素的迭代器,`end()` 返回指向向量最后一个元素后位置的迭代器。 #### 3.4 `vector` 迭代器 - **常量迭代器**:`const_iterator` 用于遍历 `vector` 但不允许修改其...
STL是C++的标准库,提供了一系列高效的容器(如vector、list、map)、迭代器、算法和函数对象。 1. 容器:存储元素的模板类,如数组(array)、向量(vector)、链表(list)、双端队列(deque)、集合(set)和...
此外,C++标准库也是学习的重要部分,包括输入/输出流、算法、容器(如vector、list、set等)和迭代器等。笔记可能会记录使用这些库的实例,帮助读者熟练运用库功能,提高编程效率。 最后,笔记可能还会涉及一些...
此外,函数模板和类模板的使用、STL(标准模板库)的介绍也是本书的重要内容,STL提供了容器(如vector、list、set)、迭代器、算法和函数对象等强大工具,极大地提高了C++的生产力。 课后习题解部分是学习过程中不...