📜  CC++ 中迭代器和指针的区别和例子(1)

📅  最后修改于: 2023-12-03 15:29:57.053000             🧑  作者: Mango

CC++ 中迭代器和指针的区别和例子

在 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 来访问当前迭代器所指向的元素。

区别

指针和迭代器的本质区别在于,指针是一个实际存在的变量,它存储了一个具体的内存地址。而迭代器则是一个相对于容器的抽象,它并不直接存储任何内存地址,而是根据容器的实际情况来判断如何访问元素。因此,不同类型的容器可能会有不同类型的迭代器。

指针可以进行任意的算术运算,包括加、减等。迭代器的算术运算则受到容器类型的限制,例如某些容器的迭代器只能进行加法运算。

总结

指针和迭代器都是访问内存中的数据的工具,但是它们的本质是不同的。指针是一个实际存在的变量,可以进行简单的算术运算。迭代器则只是容器的一个抽象,其算术运算受到容器类型的限制。在实际编程中,应该根据具体的情况选择使用指针或迭代器来访问内存中的数据。