C++ Primer学习:模板、面向对象与迭代器详解

需积分: 23 18 下载量 16 浏览量 更新于2024-08-10 收藏 2.09MB PDF 举报
"C++ Primer 学习笔记整理" 在C++编程中,迭代器和容器是重要的概念,特别是在处理标准库中的容器如vector时。迭代器提供了遍历容器内元素的机制,而vector则是一种常用的动态数组容器。 **迭代器简介** 迭代器是一种特殊的指针,它可以指向容器内的元素,并允许程序员进行前进、后退以及访问元素的操作。迭代器的设计使得程序员无需关心底层的存储结构,只需使用迭代器提供的接口即可。在C++中,对于每个容器都有对应的迭代器类型,例如对于vector,我们有`vector<T>::iterator`。通过迭代器,我们可以执行以下操作: - `iter = list.begin()`:获取容器的起始迭代器,指向第一个元素。 - `iter = list.end()`:获取容器的结束迭代器,不指向任何元素,用于表示遍历结束。 - `iter++`:将迭代器向前移动,指向下一个元素。 - `*iter`:解引用迭代器,获取或修改迭代器所指向的元素值。 使用迭代器遍历容器的典型例子是for循环: ```cpp for(vector<string>::iterator iter = list.begin(); iter != list.end(); iter++) { cout << *iter << endl; // 访问并打印当前元素 *iter = "new value"; // 修改当前元素的值 } ``` **vector容器** vector是一个动态数组,可以容纳任意类型的数据。它提供了多种构造方法: - `Vector<T> v1;`:默认构造,创建一个空的vector。 - `Vector<T> v2(v1);`:复制构造,创建v1的副本。 - `Vector<T> v3(n, i);`:创建包含n个值为i的元素的vector。 - `Vector<T> v4(n);`:创建包含n个默认构造的元素(内置类型默认为0,类类型需要默认构造函数)的vector。 向vector中添加元素,可以使用`push_back`函数,如`v.push_back(t)`。此外,还可以通过下标操作符访问元素,但注意,下标操作仅适用于已经存在的元素。 **模板与泛型编程** 模板是C++中实现泛型编程的关键工具,允许编写能够处理多种数据类型的函数或类。模板定义通常如下: ```cpp template<typename T> 返回类型 函数名(模板形参表) { 函数体 } ``` 例如,模板函数`template<typename T> T max(T a, T b)`可以找到两个T类型值中的较大者,无论T是什么类型。 **面向对象编程** C++支持面向对象编程,其中包含了继承、多态和封装的概念: - **继承**:一个类可以从另一个类派生,继承其属性和行为。 - **虚函数**(virtual):基类的虚函数允许子类重写并实现多态性。 - **动态绑定**:编译器在运行时确定调用哪个函数,基于对象的实际类型。 **重载操作符** C++允许用户根据需要重载标准操作符,比如`+`、`-`、`*`、`=`、`<`等,使得自定义类型能支持类似内置类型的操作。重载操作符的语法通常是`operator+`、`operator-`等。 总结,迭代器是访问容器元素的重要工具,而vector是常用容器之一,模板和泛型编程提供了代码复用的能力,面向对象编程则增强了代码的灵活性和可扩展性,重载操作符则使得自定义类型的行为更加符合预期。理解和掌握这些概念是深入学习C++的基础。