gpt4 book ai didi

c++ - 递归 vector 模板

转载 作者:行者123 更新时间:2023-11-28 05:11:27 25 4
gpt4 key购买 nike

我写了下面一段代码:

template<typename T>
ostream& operator<<(ostream& os, const vector<T>& v) {
os << "{";
for (auto i=v.begin(); i!=v.end(); ++i) {
os << *i << " ";
}
os << "}";
return os;
}

这适用于常规 vector<int>实例,但我想做的是:

vector<vector<int> > v={{1,2},{3,4}}
cout << v; // Should print {{1 2 } {3 4 } }

相反,我得到了编译错误(以下文本,有一长串候选者):test.cpp|212|error: no match for 'operator<<' (operand types are 'std::ostream {aka std::basic_ostream<char>}' and 'std::vector<std::vector<int> >')|

我原以为模板函数可以递归使用两次。我错了吗?如果没有,是什么给了?如果是这样,是否有某种方法可以在不重复代码的情况下使其通用?

最佳答案

 #include <iostream>
#include <vector>

template<class T, class A>
std::ostream& operator<<(std::ostream& os, const std::vector<T,A>& v) {
os << "{";
for(auto&&e:v)
os<<e<<" ";
os << "}";
return os;
}

int main(){
std::vector<int> v1{1,2,3};
std::cout<<v1<<"\n";
std::vector<std::vector<int>> v2{{1},{2,3}};
std::cout<<v2<<"\n";
}

以上代码编译运行。修正你的拼写错误,或者小心你正在使用的命名空间。在当前命名空间或与 ADL 相关的命名空间之外的任何地方重载运算符往往会失败。

关于c++ - 递归 vector 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43429553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com