【问题标题】:Does the STL include an iterator that works on arrays?STL 是否包含适用于数组的迭代器?
【发布时间】:2012-08-11 04:25:07
【问题描述】:

我想在指针和静态分配的数组上使用 STL 算法,但它们都需要迭代器。是否有任何迭代器可以接受一个数组和一个长度并让我使用它?

附:我知道 C++0x 中的 array 类,但我不想使用它。

【问题讨论】:

  • 迭代器被设计用于容器类和数组。

标签: c++ arrays pointers stl iterator


【解决方案1】:

指针随机访问迭代器!您可以简单地传递一个指向数组开头的指针,以及一个指向末尾的指针。像这样的函数(包含在 C+11 中)可能会派上用场:

template <typename T, std::size_t N>
T* begin(T(&array)[N]) { return array; }

template <typename T, std::size_t N>
T* end(T(&array)[N]) { return begin(array) + N; }

【讨论】:

  • struct overly_pedantic { void* operator&amp;() const { return nullptr; } }; :)
  • @GManNickG 哦,那个 :( 我总是忘记 operator&。
  • 是的,糟透了,因为我真的很喜欢 &amp;array[0] 在我脑海中的阅读方式,但愚蠢的操作员破坏了这一点。
  • 这就是为什么我们有std::addressof
【解决方案2】:

您可以直接使用数组。例如,

int a[5] = .....;
std::for_each( a, ar + 5, someFunctor() );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-12
    • 1970-01-01
    • 2018-09-18
    • 2021-01-13
    • 1970-01-01
    • 2021-10-17
    • 2021-06-12
    • 1970-01-01
    相关资源
    最近更新 更多