📅  最后修改于: 2023-12-03 15:29:57.053000             🧑  作者: Mango
在 C++ 中,指针(pointer)和迭代器(iterator)是两个常用的概念。虽然它们都可以用来访问内存中的数据,但是它们的本质不同。
指针是一个变量,它存储另一个变量的内存地址。指针可以用来访问这个地址中存储的值。指针可以进行简单的算术运算,例如加减、比较等。
以下是指针的一个示例:
int num = 42;
int* p = # // 指针 p 指向 num
*p = 100; // 修改了 num 的值
std::cout << *p << std::endl; // 输出 100
在这个例子中,p
是一个指向 num
的指针,*p
表示 p
指向的内存地址中存储的值。通过 *p
可以修改 num
的值,这里将其修改为 100。
迭代器是一个抽象化的概念,它允许你遍历一个容器(例如数组或容器类)中的所有元素,而不用关心容器的底层实现方式。
以下是迭代器的一个示例:
std::vector<int> v{1, 2, 3};
for (auto it = v.begin(); it != v.end(); ++it) {
std::cout << *it << std::endl;
}
在这个例子中,v
是一个存储了整数的 std::vector
容器。通过 v.begin()
和 v.end()
可以分别获得容器的起始位置和终止位置。在 for
循环中,我们使用迭代器 it
来遍历容器中的所有元素,并使用 *it
来访问当前迭代器所指向的元素。
指针和迭代器的本质区别在于,指针是一个实际存在的变量,它存储了一个具体的内存地址。而迭代器则是一个相对于容器的抽象,它并不直接存储任何内存地址,而是根据容器的实际情况来判断如何访问元素。因此,不同类型的容器可能会有不同类型的迭代器。
指针可以进行任意的算术运算,包括加、减等。迭代器的算术运算则受到容器类型的限制,例如某些容器的迭代器只能进行加法运算。
指针和迭代器都是访问内存中的数据的工具,但是它们的本质是不同的。指针是一个实际存在的变量,可以进行简单的算术运算。迭代器则只是容器的一个抽象,其算术运算受到容器类型的限制。在实际编程中,应该根据具体的情况选择使用指针或迭代器来访问内存中的数据。