Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以泛化以STL容器作为参数的函数? 我是C++中通用函数的新手。我有一个模板函数,可以打印向量的内部 template<class T> void print(vector<T> v){ for(typename vector<T>::iterator it=v.begin(); it != v.end() ; it++) cout << *it << endl; }_C++_Templates_Stl_Generic Programming - Fatal编程技术网

是否可以泛化以STL容器作为参数的函数? 我是C++中通用函数的新手。我有一个模板函数,可以打印向量的内部 template<class T> void print(vector<T> v){ for(typename vector<T>::iterator it=v.begin(); it != v.end() ; it++) cout << *it << endl; }

是否可以泛化以STL容器作为参数的函数? 我是C++中通用函数的新手。我有一个模板函数,可以打印向量的内部 template<class T> void print(vector<T> v){ for(typename vector<T>::iterator it=v.begin(); it != v.end() ; it++) cout << *it << endl; },c++,templates,stl,generic-programming,C++,Templates,Stl,Generic Programming,我想写一个更通用的打印来打印STL容器的内部。如何从这一点开始?已经有一种通用算法可以做到这一点,对输入和输出都使用迭代器: std::copy(v.begin(), v.end(), std::ostream_iterator<T>(std::cout, "\n")); 我注意到,在C++11中,使用基于范围的for循环通常比使用std::copy更方便: 这两种方法中的任何一种都适用于大多数真实的容器,尽管我通常更喜欢后者,不仅因为它更简单,而且因为它更通用。第一个需要一个实际

我想写一个更通用的打印来打印STL容器的内部。如何从这一点开始?

已经有一种通用算法可以做到这一点,对输入和输出都使用迭代器:

std::copy(v.begin(), v.end(), std::ostream_iterator<T>(std::cout, "\n"));
我注意到,在C++11中,使用基于范围的for循环通常比使用std::copy更方便:


这两种方法中的任何一种都适用于大多数真实的容器,尽管我通常更喜欢后者,不仅因为它更简单,而且因为它更通用。第一个需要一个实际的容器,该容器定义一个value_类型的成员,因此不能将其应用于内置数组,例如。如果您非常希望,可以通过使用std::iterator_traits::value_type来消除这一特定限制,但后者完全避免了问题,并在过程中大大简化了代码。

已经有一种通用算法可以做到这一点,对输入和输出都使用迭代器:

std::copy(v.begin(), v.end(), std::ostream_iterator<T>(std::cout, "\n"));
我注意到,在C++11中,使用基于范围的for循环通常比使用std::copy更方便:


这两种方法中的任何一种都适用于大多数真实的容器,尽管我通常更喜欢后者,不仅因为它更简单,而且因为它更通用。第一个需要一个实际的容器,该容器定义一个value_类型的成员,因此不能将其应用于内置数组,例如。如果您非常希望,可以通过使用std::iterator_traits::value_type来消除该特定限制,但后者完全避免了问题,并在过程中大大简化了代码。

将模板参数用作迭代器类型。请参见:将模板参数用作迭代器类型。请参见:@SteveJessop:抱歉,在我真正完成本文之前无意中发布了文章。我认为它现在更全面地涵盖了您的大部分顾虑。+1用于提及C++11。这确实是一个简洁的答案。谢谢@JerryCoffin.is main.cpp:31:10:error:“begin”不是“std”copystd::beginc,endc,normal的成员?我需要为begin和end包含一个特定的库吗?@Volkanİlbeyli:听起来你在使用一个旧的C++11之前的编译器,或者至少是一个旧的库。试试c.begin和c.end。@SteveJessop:对不起,在我真正完成这篇文章之前,我无意中发布了这篇文章。我认为它现在更全面地涵盖了您的大部分顾虑。+1用于提及C++11。这确实是一个简洁的答案。谢谢@JerryCoffin.is main.cpp:31:10:error:“begin”不是“std”copystd::beginc,endc,normal的成员?我需要为begin和end包含一个特定的库吗?@Volkanİlbeyli:听起来你在使用一个旧的C++11之前的编译器,或者至少是一个旧的库。试试c.开始和c.结束。
template <class Container>
void print(Container const &c) { 
    for (auto const &item : c)
        std::cout << item << "\n";
}