Это массив векторов в стиле 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;
}
Использовать обычный InputStream
(например, FileInputStream
), завернутый в InputStreamReader
, а затем обернутый в BufferedReader
- затем вызовите readLine
в BufferedReader
.
DataInputStream
подходит для чтения примитивов, строк с префиксом длины и т. Д.
Два класса не являются взаимоисключающими - вы можете использовать оба из них, если вам это нужно.
Когда вы выбрали, BufferedInputStream предназначен для чтения блоков данных, а не одного байта. вовремя. Он также предоставляет удобный метод readLine (). Однако он также используется для просмотра данных далее в потоке, а затем при необходимости отката к предыдущей части потока (см. Методы mark () и reset ()).
DataInputStream / DataOutputStream предоставляет удобные методы для чтения / написание определенных типов данных. Например, у него есть метод для записи / чтения строки UTF. Если бы вы сделали это самостоятельно, вам нужно было бы решить, как определить конец строки (т. Е. С помощью байта терминатора или путем указания длины строки).
Это отличается от BufferedInputStream ' s readLine (), который, как звучит метод, возвращает только одну строку. writeUTF () / readUTF () имеет дело со строками - эта строка может иметь столько строк, сколько ей нужно.
BufferedInputStream подходит для большинства целей обработки текста. Если вы делаете что-то особенное, например, пытаетесь сериализовать поля класса в файл, вам следует использовать DataInput / OutputStream, поскольку он обеспечивает больший контроль над данными на двоичном уровне.
Надеюсь, это поможет.
Я бы рекомендовал использовать Jakarta Commons IO и метод readlines () (независимо от разновидности).
Он будет следить за буферизацией / закрытием и т. Д. И вернет вам список текстовых строк. Я с радостью сверну свой собственный поток ввода с буферизацией и т. Д., Но в девяти случаях из десяти материал ввода-вывода Commons работает нормально и достаточно / более лаконичен / менее подвержен ошибкам и т. Д.