2013-11-06 2 views
0

Я довольно новый с C++, так что несите меня. Я пытаюсь быстро прочитать файл в 2D-векторе.Попытка прочитать строку в многомерном векторе

При компиляции я получаю ошибку no matching function for call to 'std::basic_ifstream::read(std::basic_string&, char&)'. Я попробовал перебросить его с помощью реинтерпрета, но это тоже не сработало.

std::vector< std::vector<std::string> > data(ROWS, std::vector<std::string>(COLUMNS)); 

... 

reader.read(data[row][column], strlen); <-- compilation chokes here 

Я читаю файл в двоичном режиме, поэтому я не уверен, что я могу использовать >>, потому что я думаю, что он возвращает форматированный вывод.

+0

вобще 'читатель >> данные [строка] [столбец];' – David

+0

FYI чтение файла «очень быстро» в C++ означает чтение его сразу и затем разбор его в памяти. – David

+0

Также * очень быстро * может означать такие вещи, как ограничение количества выделений памяти, использование непрерывной памяти ... (т. Е. 'Std :: vector ' и map '(row, col) -> index'). Формат ввода не описан, но если вы хотите, чтобы он действительно быстро, вы можете избежать iostreams, прочитать файл в блоках и интерпретировать данные вручную ... затем снова * очень быстро *, вероятно, относительный термин здесь. .. –

ответ

2

basic_istream::read() принимает аргумент char *, а не std :: string.

Если я следовать example code:

std::string &str = data[row][column]; 
str.resize(strlen, ' '); 
reader.read(&*str.begin(), strlen); 
+0

Почему не 'reader.read (str.c_str(), strlen)' –

+0

c_str() is const char *, вы не должны его изменять. Ничто не гарантирует, что указатель указывает на внутренний буфер. – remram

+0

Вы правы, спасибо, что в меня что-то почувствовали. –

Смежные вопросы