Я пытаюсь прочитать файл, который содержит список смежности как
1 37 79 164 15
2 123 134 10 141 13
где первое число в каждой строке — вершина, а следующие числа — смежные вершины.
Это мой код для чтения из файла. Мне удалось поместить строку в строку, но я не знаю, как приступить к заполнению вектора.
- Решение
- Другие решения
- Заполнить вектор из файла
- Как заполнить векторы, читая файл?
- Решение
- Другие решения
- как заполнить вектор из текстового файла двумя столбцами С++
- Векторы в C++: для начинающих
- Что такое вектор (vector)
- Как создать вектор (vector) в C++
- Второй способ обратиться к ячейке
- Как указать количество ячеек для вектора
- Как сравнить два вектора
- Векторы в C++: для начинающих
- Что такое вектор (vector)
- Как создать вектор (vector) в C++
- Второй способ обратиться к ячейке
- Как указать количество ячеек для вектора
- Как сравнить два вектора
Решение
Ты можешь использовать stringstream в заголовке sstream.
Другие решения
Используйте силу STL! 😉
- std::istringstream создать поток из строки.
- std::copy копировать материал из чего-то в другое (да, это может быть настолько общим!).
- std::istream_iterator а также std::ostream_iterator читать и записывать в поток с помощью интерфейса итератора, что очень полезно в сочетании с std::copy ,
- std::back_inserter использовать push_back с std::copy ,
- std::vector конструктор может взять итераторы для инициализации своего контента.
- std::map может быть лучше, чем std::vector если ваша вершина не является непрерывным диапазоном, начиная с 0.
Что дает что-то вроде:
Альтернативная реализация, при условии, что файл не поврежден:
Заполнить вектор из файла
Как заполнить векторы, читая файл?
Я пытаюсь прочитать файл, который содержит список смежности как
1 37 79 164 15
2 123 134 10 141 13
где первое число в каждой строке — вершина, а следующие числа — смежные вершины.
Это мой код для чтения из файла. Мне удалось поместить строку в строку, но я не знаю, как приступить к заполнению вектора.
Решение
Ты можешь использовать stringstream в заголовке sstream.
Другие решения
Используйте силу STL! 😉
- std::istringstream создать поток из строки.
- std::copy копировать материал из чего-то в другое (да, это может быть настолько общим!).
- std::istream_iterator а также std::ostream_iterator читать и записывать в поток с помощью интерфейса итератора, что очень полезно в сочетании с std::copy ,
- std::back_inserter использовать push_back с std::copy ,
- std::vector конструктор может взять итераторы для инициализации своего контента.
- std::map может быть лучше, чем std::vector если ваша вершина не является непрерывным диапазоном, начиная с 0.
Что дает что-то вроде:
Альтернативная реализация, при условии, что файл не поврежден:
как заполнить вектор из текстового файла двумя столбцами С++
Я очень новичок в C++ и пытаюсь создать вектор точек в 2D-плоскости, читаемый из текстового файла. Для этого я сначала создаю структуру, состоящую из двух значений (x, y), называемых точками. Тогда вектор этих точек называется vec. Однако я не уверен, как заполнять данные структуры, когда текстовый файл состоит из трех столбцов! Первый столбец — это всего лишь индекс для точек, второй столбец — это данные x, а третий — данные y. Я не знаю размер vec, поэтому я пытаюсь использовать push_back() Вот что я до сих пор.
Если комментарий есть, у меня есть следующее:
Извиняюсь, если это очень просто, но это не для меня! Ниже приведен пример файла txt с 6 точками.
РЕДАКТИРОВАТЬ
Вы можете использовать обычный оператор ввода >> в цикле:
Что касается структуры, я предлагаю немного другой подход:
Тогда получим вектор структур:
В цикле создайте экземпляр point , инициализируйте его элемент x и y , а затем верните его обратно в вектор points .
Обратите внимание, что в приведенном выше коде практически нет проверки ошибок или отказоустойчивости. Если в файле есть ошибка, более конкретно, если есть проблема с форматом (например, один дополнительный номер в одной строке или число до малого), то указанный выше код не сможет справиться с этим. Для этого вы можете использовать std::getline для чтения всей строки, поместить ее в std::istringstream и прочитать в переменные x и y из потока строк.
Объединяя все это вместе, простой пример рабочего кода (без обработки недействительного ввода) был бы чем-то вроде
Векторы в C++: для начинающих
Всем привет! До этого дня мы использовали чистые массивы. Чистые — это значит простые массивы, не имеющие у себя в багаже различных функций. В этом уроке мы пройдем нечистые массивы — векторы.
Быстрый переход по статье:
Что такое вектор (vector)
Вектор — это структура данных, которая уже является моделью динамического массива.
Давайте вспомним о том, что для создания динамического массива (вручную) нам нужно пользоваться конструктором new и вдобавок указателями. Но в случае с векторами всего этого делать не нужно.
Вообще, по стандарту пользоваться динамическим массивом через конструктор new — не есть правильно. Так как в компьютере могут происходить различные утечки памяти.
Как создать вектор (vector) в C++
Сначала для создания вектора нам понадобится подключить библиотеку — , в ней хранится шаблон вектора.
Кстати, сейчас и в будущем мы будем использовать именно шаблон вектора. Например, очередь или стек, не созданные с помощью массива или вектора, тоже являются шаблонными.
Далее, чтобы объявить вектор, нужно пользоваться конструкцией ниже:
- Вначале пишем слово vector .
- Далее в угольных скобках указываем тип, которым будем заполнять ячейки.
- И в самом конце указываем имя вектора.
В примере выше мы создали вектор строк.
Кстати, заполнить вектор можно еще при инициализации (другие способы мы пройдем позже — в методах вектора). Делается это также просто, как и в массивах. Вот так:
После имени вектора ставим знак равенства и скобки, в которых через пробел указываем значение элементов.
Такой способ инициализации можно использовать только в C++!
Так, чтобы заполнить вектор строками, нам нужно использовать кавычки — «строка» .
Второй способ обратиться к ячейке
Мы знаем, что в векторе для обращения к ячейке используются индексы. Обычно мы их используем совместно с квадратными скобками [] .
Но в C++ есть еще один способ это сделать благодаря функции — at(). В скобках мы должны указать индекс той ячейки, к которой нужно обратиться.
Вот как она работает на практике:
Давайте запустим эту программу:
Как указать количество ячеек для вектора
Указывать размер вектора можно по-разному. Можно это сделать еще при его инициализации, а можно хоть в самом конце программы. Вот, например, способ указать длину вектора на старте:
Так в круглых скобках () после имени вектора указываем первоначальную длину. А вот второй способ:
Первая строчка нам уже знакома. А вот во второй присутствует незнакомое слово — reserve , это функция, с помощью которой мы говорим компилятору, какое количество ячеек нам нужно использовать.
Вы можете задать логичный вопрос:»А в чем разница?». Давайте создадим два вектора и по-разному укажем их количество ячеек.
Как видим, в первом случае мы вывели три нуля, а во втором: 17, 0, 0.
Все потому, что при использовании первого способа все ячейки автоматически заполнились нулями.
При объявлении чего-либо (массива, вектора, переменной и т.д) мы выделяем определенное количество ячеек памяти, в которых уже хранится ненужный для ПК мусор. В нашем случае этим мусором являются числа.
Поэтому, когда мы вывели второй вектор, в нем уже находились какие-то рандомные числа — 17, 0, 0. Обычно они намного больше. Можете кстати попробовать создать переменную и вывести ее значение.
Нужно помнить! При использовании второго способа есть некоторый плюс — по времени. Так как для первого способа компилятор тратит время, чтобы заполнить все ячейки нулями.
Как сравнить два вектора
Если в середине программы нам понадобиться сравнить два массива, мы, конечно, используем цикл for и поочередно проверим все элементы.
Вектор снова на шаг впереди! Чтобы нам сравнить два вектора, потребуется применить всего лишь оператор ветвления if.
Векторы в C++: для начинающих
Всем привет! До этого дня мы использовали чистые массивы. Чистые — это значит простые массивы, не имеющие у себя в багаже различных функций. В этом уроке мы пройдем нечистые массивы — векторы.
Быстрый переход по статье:
Что такое вектор (vector)
Вектор — это структура данных, которая уже является моделью динамического массива.
Давайте вспомним о том, что для создания динамического массива (вручную) нам нужно пользоваться конструктором new и вдобавок указателями. Но в случае с векторами всего этого делать не нужно.
Вообще, по стандарту пользоваться динамическим массивом через конструктор new — не есть правильно. Так как в компьютере могут происходить различные утечки памяти.
Как создать вектор (vector) в C++
Сначала для создания вектора нам понадобится подключить библиотеку — , в ней хранится шаблон вектора.
Кстати, сейчас и в будущем мы будем использовать именно шаблон вектора. Например, очередь или стек, не созданные с помощью массива или вектора, тоже являются шаблонными.
Далее, чтобы объявить вектор, нужно пользоваться конструкцией ниже:
- Вначале пишем слово vector .
- Далее в угольных скобках указываем тип, которым будем заполнять ячейки.
- И в самом конце указываем имя вектора.
В примере выше мы создали вектор строк.
Кстати, заполнить вектор можно еще при инициализации (другие способы мы пройдем позже — в методах вектора). Делается это также просто, как и в массивах. Вот так:
После имени вектора ставим знак равенства и скобки, в которых через пробел указываем значение элементов.
Такой способ инициализации можно использовать только в C++!
Так, чтобы заполнить вектор строками, нам нужно использовать кавычки — «строка» .
Второй способ обратиться к ячейке
Мы знаем, что в векторе для обращения к ячейке используются индексы. Обычно мы их используем совместно с квадратными скобками [] .
Но в C++ есть еще один способ это сделать благодаря функции — at(). В скобках мы должны указать индекс той ячейки, к которой нужно обратиться.
Вот как она работает на практике:
Давайте запустим эту программу:
Как указать количество ячеек для вектора
Указывать размер вектора можно по-разному. Можно это сделать еще при его инициализации, а можно хоть в самом конце программы. Вот, например, способ указать длину вектора на старте:
Так в круглых скобках () после имени вектора указываем первоначальную длину. А вот второй способ:
Первая строчка нам уже знакома. А вот во второй присутствует незнакомое слово — reserve , это функция, с помощью которой мы говорим компилятору, какое количество ячеек нам нужно использовать.
Вы можете задать логичный вопрос:»А в чем разница?». Давайте создадим два вектора и по-разному укажем их количество ячеек.
Как видим, в первом случае мы вывели три нуля, а во втором: 17, 0, 0.
Все потому, что при использовании первого способа все ячейки автоматически заполнились нулями.
При объявлении чего-либо (массива, вектора, переменной и т.д) мы выделяем определенное количество ячеек памяти, в которых уже хранится ненужный для ПК мусор. В нашем случае этим мусором являются числа.
Поэтому, когда мы вывели второй вектор, в нем уже находились какие-то рандомные числа — 17, 0, 0. Обычно они намного больше. Можете кстати попробовать создать переменную и вывести ее значение.
Нужно помнить! При использовании второго способа есть некоторый плюс — по времени. Так как для первого способа компилятор тратит время, чтобы заполнить все ячейки нулями.
Как сравнить два вектора
Если в середине программы нам понадобиться сравнить два массива, мы, конечно, используем цикл for и поочередно проверим все элементы.
Вектор снова на шаг впереди! Чтобы нам сравнить два вектора, потребуется применить всего лишь оператор ветвления if.
Что такое вектор (vector)
Как сравнить два вектора