0 / 0 / 0
Регистрация: 25.08.2013
Сообщений: 5
1

Многомерный массив значений, размерность которого возрастает. Оцените код

25.08.2013, 23:35. Показов 809. Ответов 3
Метки нет (Все метки)

Всем привет! У меня возникла задача, и я решил сначала придумать свой вариант ее решения, и уже затем, спрашивать совета у профессионалов. Такое ощущение, что получилось достаточно громоздко. Оцените, пожалуйста. Может быть, существует лучший способ решения? Описание задачи в комментариях.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
// Исходный код написан в среде разработки Qt
 
// пусть требуется задать на плоскости произвольное количество ломаных линий с произвольным количеством точек в каждой
// причем не представляется возможным определить ни количество этих линий, ни количество точек, из которого они состоят
 
// Чтобы не перегружать код циклами, приведен пример исполнения задачи для двух прямых линий, заданных двумя точками
// Примечание: кроме x и у может быть и z, и t и даже больше...
 
 
 
#include <QCoreApplication>
#include <Qvector>
#include <array>
#include <iostream>
 
using namespace std;
 
 
 
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
 
    QVector < QVector<std::array<int, 2> > > v; // Вектор векторов
    QVector<std::array<int, 2>> v2; // Вектор массивов
    std::array<int, 2> arr; // Массив
 
    // значения координат 1-й точки 1-й линии
    arr[0] = 1; // x = 1
    arr[1] = 2; // y = 2
 
    v2.push_back(arr); // записать результаты в вектор массивов
 
    // значения координат 2-й точки 1-й линии
    arr[0]= 10; // x = 10
    arr[1] = 20; // y = 20
 
    v2.push_back(arr); // записать результаты в вектор массивов
 
    // точек может быть больше....
 
 
    // а теперь нужно определить точки для 2-й линии. Алгоритм повторяется точь-в-точь (можно написать отдельную функцию)
 
    v.push_back(v2); // предварительно запишем точки, относящиеся к 1-й линии в вектор векторов
 
    v2.clear(); // очистим вектор
 
    // значения координат 1-й точки 2-й линии
    arr[0] = 100; // x = 1
    arr[1] = 200; // y = 2
 
    v2.push_back(arr); // записать результаты в вектор массивов
 
    // значения координат 2-й точки 2-й линии
    arr[0]= 1000; // x = 10
    arr[1] = 2000; // y = 20
 
    v2.push_back(arr); // записать результаты в вектор массивов
 
    // точек может быть больше....
 
    v.push_back(v2); // опять запишем  точки, относящиеся уже к 2-й линии, в вектор векторов
 
    // и так далее, линий может быть сколь угодно много
 
 
    // как получить доступ к сохраненным значениям
    v2 = v[0]; // get line 1
    arr = v2[1]; // get point 2
 
    int num = arr[1]; // get y;
 
    cout << num;
 
 
 
    
    return a.exec();
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.08.2013, 23:35
Ответы с готовыми решениями:

Дан многомерный массив из 0 и 1; определить максимальную размерность подмассива, содержащего одни нули
Дан массив из 0 и 1.Определить максимальную размерность под массива,содержащего одни нули.

Есть ли возможность инициализировать многомерный массив, если его размерность заранее неизвестна?
Теоретический вопрос: есть ли возможность инициализировать многомерный массив, если его размерность...

Как создать массив, размерность которого будет рандомная
Всем привет, подскажите как создать массив, размерность которого будет рандомная, то есть...

Как объявить массив, размерность которого заранее не известна
как определить массив если мы не знаем сколько элементов в нем будет? Заголовок продумываем

3
187 / 180 / 25
Регистрация: 27.01.2012
Сообщений: 1,335
26.08.2013, 07:36 2
SVladimir,
C++
1
 std::pair <int, int>
- используйте его. Проще будет. Или сделайте свою структуру point2d, скажем

pair (cplusplus.com)
1
0 / 0 / 0
Регистрация: 25.08.2013
Сообщений: 5
27.08.2013, 20:08  [ТС] 3
Спасибо за совет. Итак, пока считаю этот код вполне эффективным для решения поставленной задачи, раз уж никто не высказал никаких критических замечаний

Добавлено через 7 минут
Цитата Сообщение от nexen Посмотреть сообщение
Или сделайте свою структуру point2d
Поясните, пожалуйста
0
3653 / 2990 / 828
Регистрация: 25.03.2012
Сообщений: 11,025
Записей в блоге: 1
27.08.2013, 20:18 4
Цитата Сообщение от SVladimir Посмотреть сообщение
Поясните, пожалуйста
точки надо хранить не в двумерном массиве чисел, а в одномерном массиве точек.
Цитата Сообщение от SVladimir Посмотреть сообщение
размерность которого возрастает
для работы с такими данными рекомендуется либо заранее вызывать reserve для вектора, либо подумать не удачнее ли будет заменить вектор деком или списком? В конце концов, может тебе и не нужен непременно "массив точек", а даже больше подойдёт "список точек".
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.08.2013, 20:18
Помогаю со студенческими работами здесь

Создать динамический массив, размерность которого будет варьироваться
Здравствуй киберфорум, пришлось столкнуться с одной задачей, алгоритм выполнения которой понятен и...

Как создать трехмерный массив, размерность которого задается с клавиатуры?
Visual Studio требует константы, и если я хочу вводить размерность с клавиатуры, то надо динамично...

Добавить Таблицу значений в многомерный массив
Помогите я новичок в 1С, как ВСЮ таблицу значений добавить в многомерный массив. Поясните...

Передача в многомерный массив диапазоны значений - работаю в AnyLogic
Всем привет. Добавлено через 15 минут Всем привет. Застрял на кодировке. Есть массив Array ....

Как определить массив, размерность которого определяет пользователь после запуска программы на выполнение?
int k; int mass;//к-еще не инициализирован, и поэтому выводится ошибка, а менять значение нельзя ...

Дан массив действительных чисел, размерность которого N. Подсчитать, сколько в нем отрицательных, положительных и нулевых элементов
Дан массив действительных чисел, размерность которого N. Подсчитать, сколько в нем отрицательных,...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru