392 / 284 / 53
Регистрация: 26.12.2009
Сообщений: 874
|
|
1 | |
Как создать двухмерный вектор05.08.2010, 17:02. Показов 201888. Ответов 40
Метки нет (Все метки)
если в с++ vector является заменой массива в си, то как создать двухмерный вектор?
например нужно считать матрицу размером х на у из файла в вектор при этом размер матрицы неизвестен
1
|
05.08.2010, 17:02 | |
Ответы с готовыми решениями:
40
Как правильно очистить двухмерный вектор string-ов? Двухмерный вектор строк Как создать двухмерный, статический массив Вернуть двухмерный вектор с класса? |
Nameless One
|
27.11.2011, 06:13
Как создать двухмерный вектор
#21
|
Не по теме: Сыроежка, тому посту уже больше года
0
|
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
|
||||||
27.11.2011, 14:29 | 22 | |||||
Проверил:
0
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
||||||
27.11.2011, 15:40 | 23 | |||||
и это очень, очень странно. У меня, к примеру, вот такой код:
Код
-*- mode: compilation; default-directory: "/home/nameless/samples/cpp/" -*- Compilation started at Sun Nov 27 21:37:34 make -j8 g++ -c -Wall -g -std=c++0x main.cc In file included from /usr/lib/gcc/x86_64-redhat-linux/4.6.1/../../../../include/c++/4.6.1/vector:65:0, from main.cc:2: /usr/lib/gcc/x86_64-redhat-linux/4.6.1/../../../../include/c++/4.6.1/bits/stl_vector.h: В функции-члене «void std::vector<_Tp, _Alloc>::_M_initialize_dispatch(_Integer, _Integer, std::__true_type) [with _Integer = int, _Tp = std::vector<int>, _Alloc = std::allocator<std::vector<int> >]»: /usr/lib/gcc/x86_64-redhat-linux/4.6.1/../../../../include/c++/4.6.1/bits/stl_vector.h:340:4: instantiated from «std::vector<_Tp, _Alloc>::vector(_InputIterator, _InputIterator, const allocator_type&) [with _InputIterator = int, _Tp = std::vector<int>, _Alloc = std::allocator<std::vector<int> >, std::vector<_Tp, _Alloc>::allocator_type = std::allocator<std::vector<int> >]» main.cc:6:45: instantiated from here /usr/lib/gcc/x86_64-redhat-linux/4.6.1/../../../../include/c++/4.6.1/bits/stl_vector.h:1080:4: ошибка: нет подходящей функции для вызова «std::vector<std::vector<int> >::_M_fill_initialize(std::vector<std::vector<int> >::size_type, int&)» /usr/lib/gcc/x86_64-redhat-linux/4.6.1/../../../../include/c++/4.6.1/bits/stl_vector.h:1080:4: замечание: candidate is: /usr/lib/gcc/x86_64-redhat-linux/4.6.1/../../../../include/c++/4.6.1/bits/stl_vector.h:1122:7: замечание: void std::vector<_Tp, _Alloc>::_M_fill_initialize(std::vector<_Tp, _Alloc>::size_type, const value_type&) [with _Tp = std::vector<int>, _Alloc = std::allocator<std::vector<int> >, std::vector<_Tp, _Alloc>::size_type = long unsigned int, std::vector<_Tp, _Alloc>::value_type = std::vector<int>] /usr/lib/gcc/x86_64-redhat-linux/4.6.1/../../../../include/c++/4.6.1/bits/stl_vector.h:1122:7: замечание: no known conversion for argument 2 from «int» to «const value_type& {aka const std::vector<int>&}» make: *** [main.o] Ошибка 1 Compilation exited abnormally with code 2 at Sun Nov 27 21:37:34
0
|
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
|
27.11.2011, 16:28 | 24 |
0
|
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
|
||||||
27.11.2011, 17:09 | 25 | |||||
VS 2008
Добавлено через 4 минуты
Добавлено через 3 минуты А разве числом 3 не инициализируется тип, который находится в треугольных скобках, т.е. vector< int >? Почему возможно преобразование int в vector<int> не знаю. explicit же есть. Добавлено через 7 минут Прохожу по всем конструкторам вектора отладкой, но понять что-то не могу.
0
|
44 / 44 / 17
Регистрация: 28.01.2012
Сообщений: 341
|
|||||||||||
23.07.2013, 22:00 | 26 | ||||||||||
А такой вариант ничем не хуже предыдущих ? Или все таки лучше использовать как выше (вектор векторов), т. е. не смешивать указатели с вектором?
0
|
Модератор
12458 / 7482 / 1753
Регистрация: 25.07.2009
Сообщений: 13,762
|
|
23.07.2013, 22:54 | 28 |
akk, а добавить строку в этот чудо-вектор как? Или удалить из середины откуда-нибудь?..
0
|
44 / 44 / 17
Регистрация: 28.01.2012
Сообщений: 341
|
|||||||||||
24.07.2013, 00:44 | 29 | ||||||||||
Ну в данном случаи имеется ввиду что размеры этого вектора задаются один раз и больше не изменяются. Хотя удалить можно (например что-то вроде delete (v+i); и циклом сдвинуть строки вверх).
А как тогда насчет такого использования и соответственно
И еще вопрос. Почему не получается скомпилировать такое (пишет ошибку неправильное использование void-выражения)
0
|
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
|
24.07.2013, 10:27 | 30 |
0
|
5 / 5 / 1
Регистрация: 25.10.2013
Сообщений: 230
|
|||||||||||
14.07.2014, 14:42 | 31 | ||||||||||
Подскажите, как правильный синтаксис push_back при увелечении первой и второй размерности? С одномерным все норм получается, а тут понять не могу, как запись должна выглядеть...
0
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
||||||
14.07.2014, 14:44 | 32 | |||||
Как-то так:
0
|
5 / 5 / 1
Регистрация: 25.10.2013
Сообщений: 230
|
|
14.07.2014, 14:54 | 33 |
Дык мы помещаем строку не указывая второй размерности. И куда она при этом упадет? У нас вроде как вторая размерность при этом еще вообще не существует.
Добавлено через 3 минуты компилятор выдал: error C2440: <function-style-cast>: невозможно преобразовать "std::string" в "std::vector<std::string,std::allocator<_Ty>>" это я так понимаю он как раз негодует, что мы вместо вектора во вторую размерность суем стринг.
0
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
||||||
14.07.2014, 15:07 | 34 | |||||
Второй размерности нет. Вообще. У вектора всегда одна размерность. В нашем случае мы имеем вектор (размерности один), который содержит элементы типа вектора (тоже размерности один) строк. Поэтому мы можем использовать метод .push_back двумя способами:
Ошибка же вызвана тем, что я писал из головы, и код получился нерабочим. Вот так работает:
1
|
5 / 5 / 1
Регистрация: 25.10.2013
Сообщений: 230
|
|
14.07.2014, 15:18 | 35 |
Это я понимаю. Оно и в массивах так же. Но как-то это называть то надо?
1 - это что? индекс элемента вектора во второй размерности? Почему тогда не 0?
0
|
5828 / 3479 / 358
Регистрация: 08.02.2010
Сообщений: 7,448
|
|
14.07.2014, 15:21 | 36 |
Это параметры конструктора для vector<string> (см. документацию). Первый параметр — количество элементов в создаваемом векторе, второй параметр — это значение, которым будет заполняться вектор. В данной строке мы пихаем во «внешний» вектор myVec2D вектор строк, содержащий одну строку secondStr.
1
|
5 / 5 / 1
Регистрация: 25.10.2013
Сообщений: 230
|
|
14.07.2014, 15:31 | 37 |
Во. Спасибо. Теперь все нестыковки стали понятны.
0
|
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
|
|
14.07.2014, 15:48 | 38 |
Есть же Boost.MultiArray
1
|
Неэпический
|
|
14.07.2014, 21:21 | 40 |
1
|
14.07.2014, 21:21 | |
14.07.2014, 21:21 | |
Помогаю со студенческими работами здесь
40
Двухмерный вектор пары чисел(Таблица умножения) Класс "вектор" с конструкторами, позволяющими создать нулевой вектор и вектор с произвольным числом элементов Двухмерный вектор (матрица) : сложение элементов и поворот на 90 градусов Заполнить двухмерный вектор таблицей умножения и вывести его в выходной поток Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |