"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++的基础。