📜  C++中的Const vs Regular迭代器与示例

📅  最后修改于: 2021-05-30 10:10:33             🧑  作者: Mango

先决条件: STL中的迭代器

迭代器是类似于指针的对象,它们用于遍历序列并操纵容器元素。使用迭代器的优点是,它将代码行简化为一条语句,因为它们允许我们使用指针作为迭代器来操纵STL中的内置数组。迭代器可以是常数,也可以是非常数/规则的迭代器。

常量迭代器:

const迭代器指向常量类型的元素,这意味着const_iterator指向的元素无法修改。尽管我们仍然可以更新迭代器(即,迭代器可以递增或递减,但是指向的元素不能更改)。它只能用于访问,不能用于修改。如果我们尝试使用const迭代器修改元素的值,则它将生成错误。

常规迭代器:

常规或非const_iterator指向容器内的元素,可用于修改其指向的元素。常规迭代器在将算法与容器连接以及对容器内部存储的数据进行操作方面扮演着至关重要的角色。常规迭代器最明显的形式是指针。
指针可以指向数组中的元素,并可以使用增量运算符(++)遍历它们。每种容器类型都有一个特定的常规迭代器类型,旨在迭代其元素。

下面是一个C++程序,用于演示两个迭代器在工作上的区别:

C++
// C++ program to demonstrate a regular
// and const_iterator
#include 
#include 
#include 
using namespace std;
  
// Function that demonstrate regular
// iterators
void regularIterator(vector& v)
{
    // Declare a regular iterator
    // to a vector
    vector::iterator i;
  
    // Printing the elements of the
    // vector v using regular iterator
    for (i = v.begin(); i < v.end(); i++) {
  
        // Update elements of vector
        *i += 1;
        cout << *i << " ";
    }
}
  
// Function that demonstrate const
// iterators
void constIterator(vector& v1)
{
    // Declare a const_itearor
    // to a vector
    vector::const_iterator ci;
  
    // Printing the elements of the
    // vector v1 using regular iterator
    for (ci = v1.begin(); ci < v1.end(); ci++) {
  
        // Below line will throw an error
        // as we are trying to modify the
        // element to which const_iterator
        // is pointing
  
        //*ci += 1;
  
        cout << *ci << " ";
    }
}
  
// Driver Code
int main()
{
    // Declaring vectors
    vector v = { 7, 2, 4 };
    vector v1 = { 5, 7, 0 };
  
    // Demonstrate Regular iterator
    regularIterator(v);
  
    cout << endl;
  
    // Demonstrate Const iterator
    constIterator(v1);
    return 0;
}


输出:
8 3 5
5 7 0
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”