Если я использую DataInputStream или BufferedInputStream

Это массив векторов в стиле C, здесь действительно нет ничего волшебного.

int spanningTree(vector <pair<int,int> > g[], int n);

Возможно, вы видели что-то подобное раньше:

int foo( int array[], int n);

В своем коде элементы массива не int, а std::vector с. Почему они смешивают простые массивы и std::vector я не могу вам сказать.

В вашем примере вам нужно сначала использовать operator[] для доступа к элементу, прежде чем вы сможете получить доступ к его .first и .second, или использовать front для получения первого элемента:

for(int x = 0; x < 2; ++x){
    cout << vec[x].front().first << ", " << vec[x].front().second << endl;
}
14
задан Ankur 10 April 2009 в 11:02
поделиться

3 ответа

Использовать обычный InputStream (например, FileInputStream ), завернутый в InputStreamReader , а затем обернутый в BufferedReader - затем вызовите readLine в BufferedReader .

DataInputStream подходит для чтения примитивов, строк с префиксом длины и т. Д.

18
ответ дан 1 December 2019 в 07:06
поделиться

Два класса не являются взаимоисключающими - вы можете использовать оба из них, если вам это нужно.

Когда вы выбрали, BufferedInputStream предназначен для чтения блоков данных, а не одного байта. вовремя. Он также предоставляет удобный метод readLine (). Однако он также используется для просмотра данных далее в потоке, а затем при необходимости отката к предыдущей части потока (см. Методы mark () и reset ()).

DataInputStream / DataOutputStream предоставляет удобные методы для чтения / написание определенных типов данных. Например, у него есть метод для записи / чтения строки UTF. Если бы вы сделали это самостоятельно, вам нужно было бы решить, как определить конец строки (т. Е. С помощью байта терминатора или путем указания длины строки).

Это отличается от BufferedInputStream ' s readLine (), который, как звучит метод, возвращает только одну строку. writeUTF () / readUTF () имеет дело со строками - эта строка может иметь столько строк, сколько ей нужно.

BufferedInputStream подходит для большинства целей обработки текста. Если вы делаете что-то особенное, например, пытаетесь сериализовать поля класса в файл, вам следует использовать DataInput / OutputStream, поскольку он обеспечивает больший контроль над данными на двоичном уровне.

Надеюсь, это поможет.

7
ответ дан 1 December 2019 в 07:06
поделиться

Я бы рекомендовал использовать Jakarta Commons IO и метод readlines () (независимо от разновидности).

Он будет следить за буферизацией / закрытием и т. Д. И вернет вам список текстовых строк. Я с радостью сверну свой собственный поток ввода с буферизацией и т. Д., Но в девяти случаях из десяти материал ввода-вывода Commons работает нормально и достаточно / более лаконичен / менее подвержен ошибкам и т. Д.

2
ответ дан 1 December 2019 в 07:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: