當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。