C ++中C数组的`iterator`和`const_iterator`?

时间:2014-11-18 18:27:47

标签: c++ arrays stl iterator

有没有办法从C数组和C ++ STL容器中获取iteratorconst_iterator

我有这个模板:

template <typename T>
class Another_template {
     // implementation
};

template <typename Container>
Another_template<typename Container::iterator>
fun(Container&) {
   // implementation
}

我希望上面的函数也适用于C数组。可能吗?或者我应该将它专门用于C阵列?

我知道C ++有std::array,但我对C数组感到好奇。

2 个答案:

答案 0 :(得分:4)

您可以在标头std::begin中使用标准函数std::endstd::cbeginstd::cend<iterator>使用数组和标准容器。

这是一个示范程序

#include <iostream>
#include <iterator>
#include <vector>

template <typename Container>
auto f( const Container &c ) ->decltype( std::begin( c ) )
{
    for ( auto it = std::begin( c ); it != std::end( c ); ++it )
    {
        std::cout << *it << ' ';
    }
    std::cout << std::endl;

    return std::begin( c );
}

int main() 
{
    int a[] = { 1, 2, 3, 4, 5 };
    f( a );

    std::vector<int> v = { 1, 2, 3, 4, 5 };
    f( v );

    return 0;
}

输出

1 2 3 4 5
1 2 3 4 5

编辑:您更改了原始代码段,但您可以使用相同的方法。这是一个例子

template <typename Container>
auto f1( const Container &c ) ->std::vector<decltype( std::begin( c ) )>;

答案 1 :(得分:0)

如果您需要C数组的功能,可以使用stl向量并通过获取对第一个元素的引用将其用作c数组:

int *c_array = &my_int_vector[0];