代码之家  ›  专栏  ›  技术社区  ›  Narek

STL迭代器-用途

  •  3
  • Narek  · 技术社区  · 15 年前

    10 回复  |  直到 12 年前
        1
  •  24
  •   Mark B    15 年前

    迭代器允许您从容器中分离算法。只要您有一个开始和结束迭代器,并且知道迭代器的功能(随机访问等),您就可以在迭代器指定的范围内执行操作。例如,请参见 std::for_each std::transform

        2
  •  4
  •   Amardeep AC9MF    15 年前

    迭代器允许您使用类似指针的语义遍历容器成员,否则这对于具有非连续存储的容器是不切实际的。

        3
  •  4
  •   pmr    15 年前

    迭代器提供抽象。对于只想对某个容器的内容进行操作的方法,如何遍历该容器并不重要。当然,迭代器需要更加通用。您希望使用最快的操作,但仍然希望编写泛型代码,或者希望使用支持输出的迭代器。这就是类型特征的来源。这(与概念相结合)广泛用于 STL . 看到了吗 SGI Documentation 有关概述。

    另一方面:迭代器并不是所有问题的最佳解决方案,因此常常被推广到范围(看到了吗 boost range 例如 this

        4
  •  3
  •   utnapistim    15 年前

    STL迭代器有哪些优点?

    • 如何迭代值 允许编写通用算法。

    例子:

    std::vector<int> cont;
    auto position = std::find(cont.begin(), cont.end(), 1); // forward search
    auto position = std::find(cont.rbegin(), cont.rend(), 1); // backward search
    
    • 它们允许将任意流视为可迭代序列。

    这允许您迭代I/O流,例如,编写如下代码:

    std::vector<int> cont;
    copy( cont.begin(), cont.end(), std::ostream_iterator<int>(std::cout, " ") );
    
        5
  •  2
  •   Dummy00001    15 年前

    迭代器本质上是C中指针的改进版本。顺便说一句,这两者可以混合使用,因为迭代器的行为类似于指针。

    char buf1[3] = { 1, 2, 3 };
    std::vector<char> buf2;
    buf2.resize(sizeof(buf1));
    std::copy( buf1, buf1+sizeof(buf1), buf2.begin() );
    std::copy( buf2.begin(), buf2.end(), buf1 );
    
        6
  •  1
  •   shuttle87 Bhargav Boda    15 年前

    迭代器使您的生活更轻松,因为您不需要担心在容器上进行迭代所使用的容器的底层结构。这允许您花更多的时间在相关的算法上,而不是在具体的实现上(这可能很复杂)。

        7
  •  1
  •   Martin Beckett    15 年前

    它看起来更成熟的写作

    vector<myclass>::iterator myClassVectorIterator;
    for(myClassVectorIterator = myClassVector.begin(); 
            myClassVectorIterator != myClassVector.end();
            myClassVectorIterator++)
    

    for (int i=0;i<size;i++) { ...
    
        8
  •  1
  •   Jerry Coffin    15 年前

    STL中使用迭代器的主要原因是允许算法的编写独立于数据的存储方式。当然,存储确实(或至少可以)施加一些限制,这会导致各种类型的迭代器(例如,随机访问与输入),但这些迭代器(旨在)尽可能独立于底层数据结构。

    例如,这允许 merge vector list ,并将输出写入 ostream_iterator ,而无需注意来源和/或目的地之间的差异。

        9
  •  0
  •   Nate    15 年前

    这看起来像一个家庭作业问题,但是。。。

    STL是C++。迭代器使得遍历事物列表变得很容易(通常提供一些STL魔法juju来处理事物的类型)。

        10
  •  0
  •   John    15 年前

    什么优势? 您是否希望将迭代器与其他方法进行比较?

    C样式的整数序列,例如 for(i=0;i!=N;++i) 假设容器中随机访问的成本,特别是访问元素的成本 [i] ,可以忽略不计。

    类似地,指针增量 for(p=&arr[0]; p != p+N; ++p 假设序列的实现是一个连续的内存块。

    提出了更高层次的替代方案,并实施了许多方案。范围,Perl风格的“foreach”语法,Lisp风格的“apply”。