Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 306, средняя оценка - 4.88
Mayonez
382 / 274 / 21
Регистрация: 26.12.2009
Сообщений: 875
#1

Как создать двухмерный вектор - C++

05.08.2010, 17:02. Просмотров 53976. Ответов 40
Метки нет (Все метки)

если в с++ vector является заменой массива в си, то как создать двухмерный вектор?
например нужно считать матрицу размером х на у из файла в вектор при этом размер матрицы неизвестен
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.08.2010, 17:02
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как создать двухмерный вектор (C++):

Как правильно очистить двухмерный вектор string-ов? - C++
Всем привет! Есть двухмерный вектор string: std::vector<std::vector<std::string>> functions(2); В ходе работы программы вектор должен...

Двухмерный вектор строк - C++
Столкнулся с проблемой и нужна помощь. Как создать и заполнить двухмерный вектор? vector < vector <string> > v; C int работает:...

Вернуть двухмерный вектор с класса? - C++
Как правильно вернуть матрицу созданною через вектора из класса, в котором она созданная? вот мой код: #include <iostream> #include...

Класс "вектор" с конструкторами, позволяющими создать нулевой вектор и вектор с произвольным числом элементов - C++
Привет! Задача следующая. Нужно реализовать класс "вектор" с конструкторами, которые позволяют создать нулевой вектор и вектор с...

двухмерный вектор(матрица) сложение элементов и поворот на 90 градусов - C++
Нужно что бы по главной диагонали элементы были равны сумме элементов, находящихся с ним в одной строке и одном столбце. И повернуть на...

Заполнить двухмерный вектор таблицей умножения и выввести его в выходной поток - C++
Есть такое задание: Заполнить двухмерный вектор таблицей умножения и выввести его в выходной поток Реализовано хорошо и работает...

40
DarkMasterW
4 / 4 / 0
Регистрация: 25.10.2013
Сообщений: 230
14.07.2014, 14:42 #31
Подскажите, как правильный синтаксис push_back при увелечении первой и второй размерности? С одномерным все норм получается, а тут понять не могу, как запись должна выглядеть...
C++
1
2
3
    std::vector<std::string> myVec;
    std::string secondStr = "qwe";
    myVec.push_back(secondStr);
C++
1
2
3
    std::vector<std::vector<std::string> > myVec2D;
    std::string secondStr = "qwe";
//Как?
Спасибо.
0
Nameless One
Эксперт С++
5783 / 3432 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
14.07.2014, 14:44 #32
Как-то так:
C++
1
2
3
myVec2D.push_back(std::vector<std::string>(secondStr));
// или
myVec2D[i].push_back(secondStr);
0
DarkMasterW
4 / 4 / 0
Регистрация: 25.10.2013
Сообщений: 230
14.07.2014, 14:54 #33
Цитата Сообщение от Nameless One Посмотреть сообщение
myVec.push_back(std::vector<string>(secondStr));
Дык мы помещаем строку не указывая второй размерности. И куда она при этом упадет? У нас вроде как вторая размерность при этом еще вообще не существует.

Добавлено через 3 минуты
компилятор выдал:
error C2440: <function-style-cast>: невозможно преобразовать "std::string" в "std::vector<std::string,std::allocator<_Ty>>"
это я так понимаю он как раз негодует, что мы вместо вектора во вторую размерность суем стринг.
0
Nameless One
Эксперт С++
5783 / 3432 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
14.07.2014, 15:07 #34
Цитата Сообщение от DarkMasterW Посмотреть сообщение
Дык мы помещаем строку не указывая второй размерности.
Цитата Сообщение от DarkMasterW Посмотреть сообщение
это я так понимаю он как раз негодует, что мы вместо вектора во вторую размерность суем стринг.
Второй размерности нет. Вообще. У вектора всегда одна размерность. В нашем случае мы имеем вектор (размерности один), который содержит элементы типа вектора (тоже размерности один) строк. Поэтому мы можем использовать метод .push_back двумя способами:
  1. вызывая его у внешнего вектора myVec2D, передавая в качестве параметра вектор строк;
  2. вызывая его у i-того элемента вектора myVec2D.

Ошибка же вызвана тем, что я писал из головы, и код получился нерабочим. Вот так работает:
C++
1
2
3
std::vector<std::vector<std::string>> myVec2D;
std::string secondStr = "qwe";
myVec2D.push_back(std::vector<std::string>(1, secondStr));
1
DarkMasterW
4 / 4 / 0
Регистрация: 25.10.2013
Сообщений: 230
14.07.2014, 15:18 #35
Цитата Сообщение от Nameless One Посмотреть сообщение
Второй размерности нет. Вообще. У вектора всегда одна размерность. В нашем случае мы имеем вектор (размерности один), который содержит элементы типа вектора (тоже размерности один) строк
Это я понимаю. Оно и в массивах так же. Но как-то это называть то надо?
Цитата Сообщение от Nameless One Посмотреть сообщение
(1, secondStr)
1 - это что? индекс элемента вектора во второй размерности? Почему тогда не 0?
0
Nameless One
Эксперт С++
5783 / 3432 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
14.07.2014, 15:21 #36
Цитата Сообщение от DarkMasterW Посмотреть сообщение
1 - это что? вектора во второй размерности? Почему тогда не 0?
Это параметры конструктора для vector<string> (см. документацию). Первый параметр — количество элементов в создаваемом векторе, второй параметр — это значение, которым будет заполняться вектор. В данной строке мы пихаем во «внешний» вектор myVec2D вектор строк, содержащий одну строку secondStr.
1
DarkMasterW
4 / 4 / 0
Регистрация: 25.10.2013
Сообщений: 230
14.07.2014, 15:31 #37
Во. Спасибо. Теперь все нестыковки стали понятны.
0
Voivoid
677 / 280 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
14.07.2014, 15:48 #38
Есть же Boost.MultiArray
1
gru74ik
Модератор
Эксперт CЭксперт С++
4360 / 1936 / 210
Регистрация: 20.02.2013
Сообщений: 5,138
Записей в блоге: 22
14.07.2014, 21:17 #39
Цитата Сообщение от Voivoid Посмотреть сообщение
Есть же Boost.MultiArray
Пример (кусочек кода) - было бы совсем замечательно!
0
Croessmah
Ушел
13777 / 8027 / 926
Регистрация: 27.09.2012
Сообщений: 19,770
Записей в блоге: 3
Завершенные тесты: 1
14.07.2014, 21:21 #40
Цитата Сообщение от gru74ik Посмотреть сообщение
Пример кода - было бы совсем замечательно!
http://www.boost.org/doc/libs/1_55_0...ml#sec_example
1
zarko97
279 / 39 / 0
Регистрация: 11.10.2015
Сообщений: 405
24.03.2017, 22:53 #41
Nameless One, а как сделать форыч по столбцам? чтобы он столбцы как строки не выводил?
0
24.03.2017, 22:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2017, 22:53
Привет! Вот еще темы с ответами:

Заполнить двухмерный вектор таблицей умножения и вывести его в выходной поток - C++
Заполнить двухмерный вектор таблицей умножения и вывести его в выходной поток. То, что я написал: #include &lt;vector&gt; #include...

STL Заполнить двухмерный вектор таблицей умножения и вывести его в выходной поток - C++
Заполнить двухмерный вектор таблицей умножения и вывести его в выходной поток. Добавлено через 19 минут пример, но в нем ошибки ...

Создать иерархию классов вектор и безопасный вектор с проверкой выхода за пределы - C++
Создать иерархию классов вектор и безопасный вектор с проверкой выхода за пределы. Безопасный вектор определяет переменные нижний и верхний...

Создать иерархию классов вектор(longint) и безопасный вектор с проверкой выхода за пределы - C++
Помогите не знаю как сделать! Создать иерархию классов вектор(longint) и безопасный вектор с проверкой выхода за пределы. Безопасный...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
41
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru