簡述
在知乎看到文章leetcode 的奇怪 println vector 工具,於是手癢自己也寫了一個print
函數。
因為工作中沒有需要寫這種代碼的情況,所以好久沒有寫這種代碼了,還是挺懷念以前學習編程的日子的,無憂無慮,每解決一個問題都很快樂。
代碼
#include <iostream>
#include <vector>
#include <list>
#include <map>
#include <string>
#include <iterator>
// 最基本實現
template<typename T>
void print(T t)
{
std::cout<<t;
}
// 處理 std::pair
template<typename Kt,typename Vt>
void print(std::pair<Kt,Vt> kv)
{
print(kv.first);
print(" = ");
print(kv.second);
}
// 對 std::string 特殊處理
// 注釋掉可以按照序列輸出了
void print(std::string s)
{
std::cout<<s;
}
// 處理各種序列容器(vector/list/map ...)
template<typename T,typename AllocT,template<typename,typename...> typename SequenceT>
void print(SequenceT<T,AllocT> seq)
{
print("{ ");
for(auto iter = std::begin(seq);iter != std::end(seq);iter = std::next(iter)) {
print(*iter);
print(",");
}
print("\b}");
}
// 簡單的測試一下
int main()
{
print(std::make_pair(102,"sadasd"));
print('\n');
std::vector<std::vector<int> > vec{
{3,5,4},
{2,67},
{4,6}};
print(vec);
std::list<float> l{1.2f,4.3f,6.1f,1.5f};
print(l);
print('\n');
std::map<int,std::string> m{
{1,"one"},
{0,"zero"},
{2,"two"},
};
print(m);
return 0;
}
編譯輸出
# 編譯
clang++ test.cpp
# 執行
./a.out
102 = sadasd
{ { 3,5,4},{ 2,67},{ 4,6}}{ 1.2,4.3,6.1,1.5}
{ 0 = zero,1 = one,2 = two}