我有一个使用以下构造的矢量容器:
vector<int> v1;
v1.push_back(1);
v1.push_back(2);
v1.push_back(3);
使用以下构造的deque容器:
deque<int> deq;
deq.push_front(1);
deq.push_front(2);
deq.push_front(3);
我想要一个模板功能,显示这两个容器的内容以及所有数据类型。为了处理不同的数据类型,我创建了一个模板函数:
template <typename T>
void display(vector<T> vec)
{
for(int i = 0; i < vec.size(); ++i)
{
cout << vec[i] << endl;
}
cout << endl;
}
目前正在为vector工作,如何让它适用于所有容器,如deque和list?
答案 0 :(得分:3)
这些方面的一些东西,也许是:
template <typename C>
void display(const C& container) {
std::copy(std::begin(container), std::end(container),
std::ostream_iterator<decltype(*std::begin(container))>(std::cout, "\n"));
}
答案 1 :(得分:2)
我猜你可能会使用基于范围的for-loop:
template<typename C>
void display(const C& container)
{
for (const auto& e : container)
{
std::cout << e << std::endl;
}
}
答案 2 :(得分:1)
许多STL容器支持使用对作为值类型的范围
#include <iostream>
#include <deque>
#include <vector>
#include <map>
using std::cout;
using std::endl;
namespace detail {
template <typename First, typename Second>
void print_element(const std::pair<First, Second>& pr) {
cout << pr.first << " " << pr.second << endl;
}
template <typename Type>
void print_element(const Type& element) {
cout << element << endl;
}
} // namespace detail
template <typename Container>
void print_all(const Container& container) {
for (const auto& element : container) {
detail::print_element(element);
}
}
int main() {
auto v = std::vector<int>{1, 2, 3};
auto d = std::deque<int>{1, 2, 3};
auto m = std::map<int, int>{{1, 2}};
print_all(v);
print_all(d);
print_all(m);
return 0;
}