Что-нибудь вместо многомерных массивов? - PullRequest
1 голос
/ 07 декабря 2011

Поскольку векторы предпочтительнее массивов в C ++, я хотел бы спросить, какую структуру вы обычно предлагаете на случай, если кто-то хочет хранить данные в виде многомерного массива (m строк, n столбцов).Вектор векторов - это разумная и эффективная практика?

Ответы [ 3 ]

1 голос
/ 07 декабря 2011

Нет ничего плохого в том, чтобы иметь std::vector< std::vector<int> > matrix.

Однако, если размер вашей многомерной структуры будет фиксированным (т. Е. M на n), и вам не нужны дополнительные функции, предоставляемые std::vector, тогда, возможно, std::array - хорошая альтернатива .

1 голос
/ 07 декабря 2011

Зависит от того, чего вы хотите достичь. Можно использовать вектор векторов, но вы также можете иметь один уникальный массив / вектор и вычислять индекс, когда хотите получить доступ к элементам с помощью формулы row + row_size * column ... Использование векторов может использовать больше памяти, чем вам нужно, поэтому если Ваша матрица очень большая, это может быть не лучшим решением.

Если вы работаете с числами, вы также можете взглянуть на boost :: uBLAS, который представляет собой матричную библиотеку с множеством возможных политик хранения (матрица за строкой, столбцом, сжатый, треугольный ...) - каждая из матричная модель подходит для конкретной задачи, чтобы иметь наилучшие характеристики или ограничивать выделенную память.

Я думаю, вам следует изучить все возможные способы хранения и выбрать тот, который наилучшим образом соответствует вашей проблеме.

1 голос
/ 07 декабря 2011

Да, вектор векторов - разумная практика.Почему вы думаете, что это не так?
Эффективность зависит от того, знаете ли вы заранее количество элементов.
Если нет, то в любом случае вы не можете иметь массивы переменной длины в C ++, поэтому вектор - хороший вариант.

С C ++ 11 std::array тоже хороший вариант.

...