📜  C C++中的迭代器和指针之间的区别以及示例(1)

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

C/C++中的迭代器和指针之间的区别以及示例
区别

迭代器和指针都是C/C++中用于处理容器(如数组、链表、字符串等)中元素的工具,但它们有以下几个区别:

  1. 类型:迭代器的类型与容器中元素的类型相关,而指针的类型与指向的内存空间类型相关;
  2. 功能:迭代器与容器完全解耦,可以用于任何STL容器的访问;而指针只能访问指向的内存空间;
  3. 安全:迭代器保证了容器访问的安全性,避免越界等问题;而指针则需要程序员自行考虑和处理越界等问题。
示例

以下是使用迭代器和指针分别实现对数组中元素的遍历,并求出数组元素的平均值的示例。

迭代器

#include <iostream>
#include <vector>

int main()
{
    std::vector<int> vec = {1, 2, 3, 4, 5};
    int sum = 0;

    // 使用迭代器遍历vector中的元素
    for (std::vector<int>::iterator it = vec.begin(); it != vec.end(); ++it)
    {
        sum += *it;
    }

    std::cout << "Average: " << (double)sum / vec.size() << std::endl;  // 输出平均值

    return 0;
}

在上面的示例中,使用vector容器和迭代器遍历容器中的元素,获取元素的值并累加到sum变量中,最终输出数组元素的平均值。

指针

#include <iostream>

int main()
{
    int arr[] = {1, 2, 3, 4, 5};
    int sum = 0;

    // 使用指针遍历数组中的元素
    for (int* p = arr; p != arr + 5; ++p)
    {
        sum += *p;
    }

    std::cout << "Average: " << (double)sum / 5 << std::endl;  // 输出平均值

    return 0;
}

在上面的示例中,使用指针遍历数组中的元素,获取元素的值并累加到sum变量中,最终输出数组元素的平均值。

可以看到,使用迭代器和指针的代码非常相似,但它们的作用和使用场景不同。在处理STL容器(如vectorlist等)等场景中,使用迭代器更为方便和安全。在处理数组等数据结构时,使用指针更为方便和灵活。