Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
 
Dj_Crush
0 / 0 / 0
Регистрация: 14.07.2015
Сообщений: 26
#1

Возможно ли вложение контейнера array в контейнер vector? - C++

14.07.2015, 15:00. Просмотров 593. Ответов 29
Метки нет (Все метки)

мне надо в динамическом массиве хранить 3-х мерные координаты треугольников.
пытаюсь сделать вот так:



vector<array<float,9> > coordinates;
данная комбинация не работает.



как можно создать динамический массив на 9 чисел?

как можно обращаться к отдельным координатам - x1,y1,z1 и т.д

и как записывать значения в такой массив?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.07.2015, 15:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Возможно ли вложение контейнера array в контейнер vector? (C++):

Очистка контейнера vector - C++
Доброго времени суток господа программисты. У меня возникла дилемма. В общем, у меня есть вектор std::vector&lt;std::vector&lt;int&gt; &gt; grid;...

Ошибка использования контейнера array - C++
Задание:Дан целочисленный массив размера N. Назовем серией группу подряд идущих одинаковых элементов, а длиной серии - количество этих...

контейнер vector - C++
Как я понимаю, vector представляет собой что-то вроде динамического массива. Но массивы бывают одномерные,двумерные и так далее. Есть ли...

Создать матрицу из контейнера std::array - C++
Есть код: #include &lt;iostream&gt; #include &lt;array&gt; using namespace std; int main () { array &lt;int,5&gt; myarray; return...

Обработка STL контейнера vector - C++
Текст дан в виде вектора. Отсортировать элементы этого вектора и превратить на два списка так, чтобы в первом были только те элементы,...

Контейнер std::vector - C++
Помогите определить почему не работает задача. Оибку выбивает на строку k.push_back(0); #include &lt;iostream&gt; #include &lt;math.h&gt; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
nmcf
5309 / 4629 / 1548
Регистрация: 14.04.2014
Сообщений: 18,437
14.07.2015, 15:19 #16
Используй tuple, он точно компилируется, или структуру с древним массивом.
Kerry_Jr
Модератор
Эксперт PHP
2184 / 1980 / 692
Регистрация: 14.05.2014
Сообщений: 5,788
Записей в блоге: 1
Завершенные тесты: 5
14.07.2015, 15:23 #17
Цитата Сообщение от Dj_Crush Посмотреть сообщение
C++
1
vector<array<float,9> > coordinates;
встречался с такой бедой: из-за пробела между двумя крайними угловыми скобками студия выдавала ошибку.
C++
1
vector<array<float,9>> coordinates;
Dj_Crush
0 / 0 / 0
Регистрация: 14.07.2015
Сообщений: 26
14.07.2015, 15:27  [ТС] #18
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <vector>
#include <array>
#include <iostream>
 
int main()
{
    std::vector<std::array<float, 9>> coordinates;
 
    coordinates.push_back({ 1.2, 3.3, 4.3 });
 
    std::cout << coordinates[0][0] << std::endl;
    std::cout << coordinates[0][1] << std::endl;
    std::cout << coordinates[0][2] << std::endl;
    std::cout << coordinates[0][3] << std::endl;
    return 0;
}
в vs 2013 не компилируется....
DrOffset
7089 / 4230 / 950
Регистрация: 30.01.2014
Сообщений: 7,006
14.07.2015, 15:31 #19
Цитата Сообщение от Dj_Crush Посмотреть сообщение
в vs 2013 не компилируется....
Ну ошибку-то хоть можно увидеть?
Dj_Crush
0 / 0 / 0
Регистрация: 14.07.2015
Сообщений: 26
14.07.2015, 15:33  [ТС] #20
3 IntelliSense: no instance of overloaded function "std::vector<_Ty, _Alloc>:ush_back [with _Ty=std::array<float, 9U>, _Alloc=std::allocator<std::array<float, 9U>>]" matches the argument list
argument types are: ({...})
object type is: std::vector<std::array<float, 9U>, std::allocator<std::array<float, 9U>>> d:\Boulder\Win32Project1\Win32Project1\main.cpp
S_el
2094 / 1601 / 307
Регистрация: 15.12.2013
Сообщений: 6,435
14.07.2015, 15:37 #21
Dj_Crush,сделайте так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <vector>
#include <array>
#include <iostream>
 
int main()
{
std::vector<std::array<float, 9>> coordinates;
std::array<float,9> arr= {1.2, 3.3, 4.3 };
coordinates.push_back(arr );
 
std::cout << coordinates[0][0] << std::endl;
std::cout << coordinates[0][1] << std::endl;
std::cout << coordinates[0][2] << std::endl;
std::cout << coordinates[0][3] << std::endl;
return 0;
}
Dj_Crush
0 / 0 / 0
Регистрация: 14.07.2015
Сообщений: 26
14.07.2015, 15:44  [ТС] #22
Error 2 error LNK2019: unresolved external symbol _WinMain@16 referenced in function ___tmainCRTStartup d:\dll\Win32Project4\Win32Project4\MSVCRTD.lib(crtexew.obj) Win32Project4

а что это за ошибка?
приложение делаю не консольное....
DrOffset
7089 / 4230 / 950
Регистрация: 30.01.2014
Сообщений: 7,006
14.07.2015, 15:46 #23
Dj_Crush, ясно. С момента выхода VS 2013 вышло уже 4 ее обновления. Видимо версия не последняя.
Информация об обновлениях есть здесь: https://www.microsoft.com/en-us/down....aspx?id=44921

А пока что можно последовать совету выше.

Добавлено через 1 минуту
Цитата Сообщение от Dj_Crush Посмотреть сообщение
приложение делаю не консольное....
В неконсольном приложении функция main называется WinMain.
Dj_Crush
0 / 0 / 0
Регистрация: 14.07.2015
Сообщений: 26
14.07.2015, 15:53  [ТС] #24
у меня как раз 4-е обновление.. получается самое последнее...

Добавлено через 28 секунд
точно...про функцию....

Добавлено через 5 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <vector>
#include <array>
#include <iostream>
#include <Windows.h>
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) 
{
    std::vector<std::array<float, 9>> coordinates;
    std::array<float, 9> arr = { 1.2, 3.3, 4.3 };
    coordinates.push_back(arr);
 
    std::cout << coordinates[0][0] << std::endl;
    std::cout << coordinates[0][1] << std::endl;
    std::cout << coordinates[0][2] << std::endl;
    std::cout << coordinates[0][3] << std::endl;
    system("pause");
    return 0;
}
но она ничего не выдает...только "нажмите любую клавишу"... где опять ошибка?
DrOffset
7089 / 4230 / 950
Регистрация: 30.01.2014
Сообщений: 7,006
14.07.2015, 15:56 #25
Цитата Сообщение от Dj_Crush Посмотреть сообщение
но она ничего не выдает...только "нажмите любую клавишу"... где опять ошибка?
Ошибки нет.
Просто консольное окно в неконсольном приложении не создается. Вот и вывода не видно.
Создай консольное приложение и увидишь вывод.
Dj_Crush
0 / 0 / 0
Регистрация: 14.07.2015
Сообщений: 26
14.07.2015, 16:00  [ТС] #26
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <array>
#include <vector>
#include <iostream>
 
 
int main()
{
    std::vector<std::array<float, 9>> coordinates;
 
    coordinates.push_back({1.2, 3.3, 4.3});
 
    std::cout << coordinates[0][0] << std::endl;
    std::cout << coordinates[0][1] << std::endl;
    std::cout << coordinates[0][2] << std::endl;
    std::cout << coordinates[0][3] << std::endl;
}
а почему эта не компилируется.. vs 2013 4-е обновление...
DrOffset
7089 / 4230 / 950
Регистрация: 30.01.2014
Сообщений: 7,006
14.07.2015, 16:04 #27
Цитата Сообщение от Dj_Crush Посмотреть сообщение
а почему эта не компилируется.. vs 2013 4-е обновление...
Ну если все так, как ты говоришь, то диагностировать по фотографии у меня больше нет возможности. Нужно смотреть пациента лично. Так что пока не знаю.

Может кто угадает еще, подожди других ответов.
Dj_Crush
0 / 0 / 0
Регистрация: 14.07.2015
Сообщений: 26
14.07.2015, 16:10  [ТС] #28
спасибо.. заработала..

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <vector>
#include <array>
#include <iostream>
 
 
int main()
{
    std::vector<std::array<float, 9>> coordinates;
 
    coordinates.push_back({ 1.2, 3.3, 4.3 });
 
    std::cout << coordinates[0][0] << std::endl;
    std::cout << coordinates[0][1] << std::endl;
    std::cout << coordinates[0][2] << std::endl;
    std::cout << coordinates[0][3] << std::endl;
 
    system("pause");
}
но почему-то точка coordinates.push_back подчеркнута...она ее определяет как ошибку...но компилируется.

1 IntelliSense: no instance of overloaded function "std::vector<_Ty, _Alloc>:ush_back [with _Ty=std::array<float, 9U>, _Alloc=std::allocator<std::array<float, 9U>>]" matches the argument list
argument types are: ({...})
object type is: std::vector<std::array<float, 9U>, std::allocator<std::array<float, 9U>>>
DrOffset
7089 / 4230 / 950
Регистрация: 30.01.2014
Сообщений: 7,006
14.07.2015, 16:14 #29
Цитата Сообщение от Dj_Crush Посмотреть сообщение
но почему-то точка coordinates.push_back подчеркнута...она ее определяет как ошибку...но компилируется.
А вот в чем дело
Ну так это ошибка IntelliSense, а не компилятора. Наблюдаешь как раз тот случай, когда компилятор развивается быстрее, чем внешнее средство диагностики исходных кодов.
В общем тут все просто. IntelliSense просто еще не до конца обучен новому С++ и ошибочно трактует эту запись как ошибку.
Dj_Crush
0 / 0 / 0
Регистрация: 14.07.2015
Сообщений: 26
14.07.2015, 16:21  [ТС] #30
я так понял что с координатами треугольника удобнее через структуру работать?
там их можно подписать x1,y1,z1...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.07.2015, 16:21
Привет! Вот еще темы с ответами:

Копирование контейнера vector в конструкторе (STL) - C++
Добрый день! У меня есть класс, в котором объявлен вектор указателей на объекты: class Schedule { public: ... Schedule(void);...

Создать стек на основе контейнера vector - C++
На основе контейнера vector построить стек целых чисел. Выполнить операции занесения элемента в стек, извлечение значения с вершины стека,...

Reallocation памяти контейнера std::vector - C++
расширение памяти в этом контейнере происходит по логарифмическому закону. Объясните , пожалуйста, знатоки, зачем это нужно?

Инициализация графа (контейнер vector) - C++
Нашёл как ра то, что мне нужно, алгоритм Форда-Беллмана. С помощью этого алгоритма можно найти кратчайшие пути между заданной вершиной и...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
14.07.2015, 16:21
Ответ Создать тему
Опции темы

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