C++ STL Вектор векторов

STL Вектор векторов. Пример одной простой задачи.
STL в C++ крайне полезна. Об этом слышали очень многие. Но STL часто запрещают использовать при обучении, заставляя решать задачи без него. Отчасти это правильно, но это имеет и плохую сторону. STL приходится изучать самостоятельно. Самостоятельное обучение рано или поздно приводит к тому, что кто-то что подскажет или поможет. Т.е перестает быть полноценно самостоятельным.

Изучаемая нами STL очень часто начинается с векторов. С вектором более или мене ясно, но что делать, если потребовался двумерный вектор или многомерный? Вариантов несколько. Очень вероятно, что этот вектор векторов не то, что нужно, и есть более удобное для использования. Но, тем не менее, для умений такое построение вектора векторов не помешает.

  • Задача C++ STL Построить вектор векторов, в котором внешний вектор хранит строки с числами, а внутренний вектор хранит эти числа.

(уж простите за кривую постановку задачи если что-то не так). Смысл такой, что должен быть вектор, который хранит в себе строки. Сами по себе строки являются набором чисел, причем в каждой строке может быть разное количество этих чисел. А внутри вектора для каждой строки хранится вектор чисел, в который входят только те числа, которые есть в строке. Простыми словами: Есть много строк и каждая такая строка хранит в себе набор чисел. Набор этих чисел хранит в себе все свои числа. В общем, извращенная и непонятно где нужная задача.
Но решение этой задачи собрало в себя несколько элементарных приемов, которые мне приходилось выискивать в разных сайтах.

Что нужно знать для хорошего восприятия материала:

  • Понятие вектора и умение добавлять в него элементы.
  • Уметь обходить вектор итераторами
  • Знание циклов
  • Вроде бы это все знания, которые я использовал для решения.
    Для некоторого своего удобства, я буду считывать строки из файла. Надеюсь не будет проблемой

      C++ STL Вектор векторов. Вектор строк, содержащий числа этих строк

    distance — Это узнать номер индекса по итератору. Вовнутрь подается начало вектора и итератор, а пробегая от начала к указанному итератору, получается номер индекса.
    at — Это обращение к индексу вектора
    В принципе, вы можете попробовать сделать обход без итераторов, но подозреваю, что это у некоторых вызовет затруднения. Проход итераторами выглядит не комильфо, страшно, но зато точно выполняет без лишнего.
    Неудобочитаемость связана прежде всего с типом переменной it
    vector::iterator
    vector::iterator it
    Но эти типы объявленыля векторов еще в самом начале, поэтому так выходит. Можно их сократить с помощью typedef, но сути это совсем не меняет.

    Обращаю внимание, что при вложенном цикле, вектор векторов не использую как вектор векторов, а использую как обычный одномерный вектор.
    Вывод у меня не самый наглядный, но это мелочи.

    Пример содержимого файла

    Обязательно, чтоб после последней цифры был как минимум 1 разделяющий символ.
    Надеюсь этот пример оказался кому-то полезен.

    Хотя добьем эту тему примером попроще. Пример заполнения вектора векторов в стиле Паскалевских массивов. До С++11 не существует списка инициализации, поэтому я привожу такой пример, который годится для устаревающих компиляторов.

    Все комментарии на сайте проверяются, поэтому ваш комментарий может появиться не сразу. Для вставки кода в комментарий используйте теги: [php]ВАШ_КОД[/php]

    Добавить комментарий

    Ваш e-mail не будет опубликован.

    Поиск

     
         
    Яндекс.Метрика

    НАГРАДИ АВТОРА САЙТА
    WEBMONEY
    R375024497470
    U251140483387
    Z301246203264
    E149319127674
    
    
    Не, ну я всякое видел... но чтобы на фразу: "Откройте файл", открывали крышку системника - это впервые

    Выражаю свою признательность

    • Максиму очень признателен за указание на мои ошибки и неточности.
    • Sergio ===> за оказание помощи в исправлении моих ошибок
    • Gen ===> за правильное стремление помочь другим новичкам и выявления моих ошибок