当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C++ Iterators和Pointers的区别用法及代码示例


在 C++ 编程中,我们同时使用指针和迭代器来管理和操作数据结构。迭代器和指针在引用和取消引用内存的能力方面有许多相似之处,但两者之间也存在一定的差异。理解其中的差异对于 C++ 编程非常重要。

指针

pointer 是一个包含另一个变量的地址的变量,即该变量的内存位置的地址。与任何变量或常量一样,我们必须在使用指针存储任何变量地址之前声明它。

用法

type* var_name;

示例

下面的示例演示了如何使用指针来存储变量的地址。

C++


// The output of this program can be different   
// in different runs. Note that the program  
// prints address of a variable and a variable 
// can be assigned different address in different 
// runs. 
#include <iostream>; 
using namespace std; 
int main() 
{ 
    int x=5; 
    int* myptr = &x; 
      
    cout << "Value of x is: " << x << endl; 
    cout << "address of x is: " <<  myptr << endl; 
    return 0; 
} 
输出
Value of x is: 5
address of x is: 0x7ffde9197ed4

迭代器

iterator 是指向元素范围(例如数组或容器)中的某个元素的任何对象,能够迭代该范围的元素。

用法

type_container :: iterator var_name;

示例

下面的例子演示了迭代器的使用。

C++


// C++ program to demonstrate iterators 
#include <iostream> 
#include <vector> 
using namespace std; 
int main() 
{ 
    // Declaring a vector 
    vector<int> v = { 1, 2, 3 }; 
  
    // Declaring an iterator 
    vector<int>::iterator i; 
  
    int j; 
  
    cout << "Without iterators = "; 
  
    // Accessing the elements without using iterators 
    for (j = 0; j < 3; ++j) { 
        cout << v[j] << " "; 
    } 
  
    cout << "\nWith iterators = "; 
  
    // Accessing the elements using iterators 
    for (i = v.begin(); i != v.end(); ++i) { 
        cout << *i << " "; 
    } 
  
    // Adding one more element to vector 
    v.push_back(4); 
  
    cout << "\nWithout iterators = "; 
  
    // Accessing the elements without using iterators 
    for (j = 0; j < 4; ++j) { 
        cout << v[j] << " "; 
    } 
  
    cout << "\nWith iterators = "; 
  
    // Accessing the elements using iterators 
    for (i = v.begin(); i != v.end(); ++i) { 
        cout << *i << " "; 
    } 
  
    return 0; 
} 
输出
Without iterators = 1 2 3 
With iterators = 1 2 3 
Without iterators = 1 2 3 4 
With iterators = 1 2 3 4 

迭代器和指针之间的区别

迭代器和指针的相似之处在于我们可以取消引用它们来获取值。但是,存在以下主要区别:

指针 迭代器
指针保存内存中的地址。 迭代器可以保存指针,但它可能更复杂。例如,迭代器可以迭代文件系统上的数据、分布在多台计算机上的数据或以编程方式在本地生成的数据。
一个很好的例子是链表上的迭代器,迭代器将移动链表中节点上的元素,这些节点在 RAM 中的地址可能是分散的。
我们可以对指针执行简单的算术运算,例如递增、递减、添加整数等。 并非所有迭代器都允许这些操作,例如,我们不能递减 forward-iterator,或向 nonrandom-access 迭代器添加整数。
T* 类型的指针可以指向任何类型 T 对象。 迭代器受到更多限制,例如,向量::迭代器只能引用向量容器内的双精度数。
我们可以使用删除指针删除 由于迭代器引用容器中的对象,与指针不同,因此不存在“删除对于迭代器。 (容器负责内存管理。)


相关用法


注:本文由纯净天空筛选整理自rajnr6大神的英文原创作品 Difference between Iterators and Pointers in C++ with Examples。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。