请考虑以下代码。我试图将一个向量的向量输出到ostream。
#include <iterator>
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
template<typename T>
std::ostream &operator <<(std::ostream &os, const std::vector<T> &v) {
using namespace std;
copy(v.begin(), v.end(), ostream_iterator<T>(os, "\n"));
return os;
}
int main() {
using namespace std;
vector<string> v1;
cout << v1;
vector<vector<string> > v2;
cout << v2;
return 0;
}
输出字符串向量的语句是可行的。但是输出字符串向量的向量的语句不行。我使用的是g++ 4.7.0。我尝试过使用或不使用-std=c++11标志。在C++11模式下,它会给出半页错误信息中的这一行。
error: cannot bind 'std::ostream_iterator<std::vector<std::basic_string<char> >, char, std::char_traits<char> >::ostream_type {aka std::basic_ostream<char>}' lvalue to 'std::basic_ostream<char>&&'
我不确定我理解它的含义。能有人给我解释一下吗?我更或多或少知道什么是rvalue引用,但我不明白为什么std::basic_ostream<char>
不能绑定到std::basic_ostream<char>&&
。也许我还不够了解。还有更好的方法吗?
提前感谢。
vector<vector<string>>
的情况下,"\n" 必须能够转换为vector<string>
。当然这是行不通的。 - J-16 SDiZ