我使用了大约6个不同的C ++容器。我开始编写打印功能来输出容器内容。这有必要吗?我认为这是C ++库的一部分吗?
void print_list(const list<int>& list_int)
{
for (list<int>::const_iterator it = list_int.begin(); it != list_int.end(); it++) cout << *it << " ";
}
void print_um(const unordered_map<int, double>& map_int_d)
{
for(unordered_map<int, double>::const_iterator it = map_int_d.begin(); it != map_int_d.end(); ++it)cout << "[" << it->first << "," << it->second << "] ";
}
答案 0 :(得分:4)
它不是库的一部分,但使用提供的工具很容易编写:
C c; // Where C is a container type
std::copy(
c.begin(), c.end()
, std::ostream_iterator< C::value_type >( cout, " " )
);
对于元素为pair
的容器(如map
,我相信unordered_map
),您需要一个自定义输出迭代器来打印pair
逗号和括号。
答案 1 :(得分:2)
您在问题中提供的代码有一个提示,说明为什么它不是标准库的一部分。您的代码使用方括号和逗号,没有空格来显示地图中的对。其他人可能希望它的格式不同,所以标准委员会的选择是:
他们选择了三个,因为他们知道可以开发满足人们特定需求的图书馆。
答案 2 :(得分:1)
怎么样:
#include <iostream>
#include <map>
#include <algorithm>
template <typename K, typename V>
std::ostream& operator<<(std::ostream& os, const std::pair<K,V>& p)
{
return os << "[" << p.first << ", " << p.second << "]";
}
template <typename Container>
std::ostream& operator<<(std::ostream& os, const Container& c)
{
std::copy(c.begin(), c.end(),
std::ostream_iterator<typename Container::value_type>(os, " "));
return os;
}
你可能也对Boost Spirit Karma:
感到迷惑#include <boost/spirit/include/karma.hpp>
using boost::spirit::karma::format;
using boost::spirit::karma::auto_;
int main()
{
std::vector<int> ints(1000);
std::map<std::string, int> pairs();
// ...
std::cout << format(auto_ % " ", ints) << std::endl;
std::cout << format(('[' << auto_ << ',' << ']') % " ", pairs) << std::endl;
}