У меня есть файл данных, который представляет собой одну строку, состоящую из вложенной серии двойных чисел, например.
[[0.127279,0.763675,0.636396],[0.254558,0.890955,0.636396],
[0.127279,0.636396,0.763675],[0.254558,0.763675,0.763675],
[0.381838,0.890955,0.763675],[0.127279,0.509117,0.890955],
[0.254558,0.636396,0.890955],[0.509117,0.890955,0.890955]]
Я хотел бы иметь возможность прочитать это в STL vector<vector<double> >
, используя оператор потока, который шаблонируется по внутреннему типу A:
vector<vector<double> > A;
FIN >> A;
Я нашел способ сделать это, когда вектор не является вложенным, т.е. простой vector<T>
так:
template <class T>
istream& operator>>(istream& s, vector<T> &A){
T x;
string token; char blank;
s >> blank; // Gobble the first '['
while( getline(s, token, ',') ) {
istringstream input(token);
input >> x;
A.push_back(x);
}
s >> blank; // Gobble the last ']'
return s;
}
Но у меня проблема с istream& operator>>(istream& s, vector<vector<T> >&A)
, потому что я не могу понять, правильно ли внутренние ]
. Я уверен, что у Boost есть способ сделать это, но я хотел бы увидеть решение с STL для педагогических целей.
Примечание: я знаю, что перегрузка оператора потока для vector<T>
может иметь далеко идущие нежелательные последствия и что реализация должна быть обернута в свой собственный класс - я использую этот пример выше для пояснения вопрос.
EDIT:
Мне бы хотелось, чтобы метод был достаточно устойчивым для обработки входного массива, размер (и размер внутреннего массива) которого равен , а не , заранее известному, но предполагаемому при чтении потока.