Пожалуйста, учитывайте следующий код. Я пытаюсь вывести вектор векторов в ostream.Печать вектор векторов для 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. Я пробовал w/& без флага -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>' case, "\ n" должны быть закрыты для 'vector '. Потому что это не сработает –
@ J-16SDiZ: О чем ты говоришь? Нет, нет. –
@ J-16SDiZ: Нет. Это просто неправильно. – Nawaz