Re: STL матрица нефиксированного размера
От: ZORK Россия www.zorkaltsev.com
Дата: 22.10.01 03:30
Оценка: 2 (1)
Здравствуйте Хитрик Денис, Вы писали:

ХД>Товарищи, подскажите, пожалуйста как организовать в программе матрицу произвольного размера?


ХД>Поясню. В STL есть контейнер vector, Он может изменять свой размер по мере выполнения программы. И задавать этот самый размер тоже можно во время работы. Хотелось бы подобного и для матрицы.


ХД>Для чего это нужно? Просто мне неизвестна размерность матрицы, которая будет входным параметром. А хочется гибкости. Если есть другие варианты, то с удовольствием выслушаю предложения.


Посмотри сюда http://www.sgi.com/tech/stl/other_resources.html — там много чего, но первой строчкой идет The Matrix Template Library. Я ей лично не пользовался, но когда то заглядывал. Это вроде как раз расширение STL для работы с матрицами и векторами, в математическом понимании.
Думать надо ...головой :)
Re[3]: STL матрица нефиксированного размера
От: retalik www.airbandits.com/
Дата: 23.10.01 04:27
Оценка: 2 (1)
Здравствуйте Хитрик Денис, Вы писали:

ХД>Здравствуйте retalik, Вы писали:


R>>[лирическое отступление] вместо std::vector почти всегда лучше использовать std::deque. Он тоже имеет константное время доступа к произвольным элементам, но у него существенно быстрее добавление в конец.


ХД>Можно об этом поподробнее?


Ну, например, вот цитата:

>deque — вид последовательности, которая, подобно вектору, поддерживает итераторы произвольного доступа. Кроме того она поддерживает операции вставки и стирания в начале или в конце за постоянное время; вставка и стирание в середине занимают линейное время. Как с векторами, управление памятью обрабатывается автоматически.


Почитай руководство по STL (недавно выложили): http://www.rsdn.ru/article/?cpp/stl.xml
Автор(ы): Александр Степанов, Менг Ли


Насколько помню, по скорости произвольного доступа deque проигрывает вектору какие-то мелкие проценты, но у вектора линейное время добавления в конец (если нет резервного места). Зато вектор позволяет обращаться к элементам как к непрерывной области памяти (это какой-то комментарий к C++ Standard был).

R>>а vector<vector<double>> или deque<deque<double>> чем не устраивает?

ХД>Теперь, когда понял ошибку, эти варианты устраивают.
Если одна размерность более стабильная, можно даже что-то типа vector<deque<>> :)

А resize ты правильно делаешь.
Успехов,
Виталий.
STL матрица нефиксированного размера
От: Хитрик Денис Россия RSDN
Дата: 21.10.01 13:43
Оценка:
Товарищи, подскажите, пожалуйста как организовать в программе матрицу произвольного размера?

Поясню. В STL есть контейнер vector, Он может изменять свой размер по мере выполнения программы. И задавать этот самый размер тоже можно во время работы. Хотелось бы подобного и для матрицы.

Для чего это нужно? Просто мне неизвестна размерность матрицы, которая будет входным параметром. А хочется гибкости. Если есть другие варианты, то с удовольствием выслушаю предложения.
Правила нашего с вами форума.
Как правильно задавать вопросы. © 2001 by Eric S. Raymond; перевод: © 2002 Валерий Кравчук.
Re: STL матрица нефиксированного размера
От: retalik www.airbandits.com/
Дата: 22.10.01 03:35
Оценка:
Здравствуйте Хитрик Денис, Вы писали:

ХД>Товарищи, подскажите, пожалуйста как организовать в программе матрицу произвольного размера?


ХД>Поясню. В STL есть контейнер vector, Он может изменять свой размер по мере выполнения программы. И задавать этот самый размер тоже можно во время работы. Хотелось бы подобного и для матрицы.


ХД>Для чего это нужно? Просто мне неизвестна размерность матрицы, которая будет входным параметром. А хочется гибкости. Если есть другие варианты, то с удовольствием выслушаю предложения.


[лирическое отступление] вместо std::vector почти всегда лучше использовать std::deque. Он тоже имеет константное время доступа к произвольным элементам, но у него существенно быстрее добавление в конец.

а vector<vector<double>> или deque<deque<double>> чем не устраивает?
Успехов,
Виталий.
Re: STL матрица нефиксированного размера
От: Хитрик Денис Россия RSDN
Дата: 22.10.01 13:58
Оценка:
Спасибо большое ответившим!

Действительно, на сайт SGI я не заглядывал даже, но всё же мне нужен был именно второй вариант. Просто самому жо него дойти помешали слабые познания в C/C++ программировании (надеюсь на развитие оных).

Теперь вопрос состоит в следующем: Как матрицу, заданную как deque< deque< int > >, заполнить? Ведь к несуществующим элементам нельзя обратиться через операцию индексирования [], выдаёт Access violation :-(
(поэтому-то я и задал первый вопрос -- помня TP7 пропробовал заполнить матрицу через индексы -- MyMatrix[i][j])

Нужно ли использовать в данном случае промежуточный дек deque< int >, заполнить его через .push_back, апотом через тот же .push_back засовывать всю строчку целиком в deque< deque< int > >?

Объясните, пожалуйста.
Правила нашего с вами форума.
Как правильно задавать вопросы. © 2001 by Eric S. Raymond; перевод: © 2002 Валерий Кравчук.
Re: STL матрица нефиксированного размера
От: Хитрик Денис Россия RSDN
Дата: 22.10.01 16:26
Оценка:
Кстати, по мере прочтения документации возникла идея. Когда я узнаЮ размеры требуемой матрицы...
deque< deque< int > > MyMatrix; // Объявили переменную

cin >> N >> M;
// Вот я узнал размеры матрицы -- NxM
// И делаю следующее
MyMatrix.resize( N ); // Определяю количество строк
for (int i = 0; i < MyMatrix.size(); i++) MyMatrix[ i ].resize(M); // Для каждой строчки -- кол-во столбцов


Как такой вариант? В стиле STL? Или есть что-то попроще?

Спасибо за ответы!
Правила нашего с вами форума.
Как правильно задавать вопросы. © 2001 by Eric S. Raymond; перевод: © 2002 Валерий Кравчук.
Re[2]: STL матрица нефиксированного размера
От: Хитрик Денис Россия RSDN
Дата: 22.10.01 16:29
Оценка:
Здравствуйте retalik, Вы писали:

R>[лирическое отступление] вместо std::vector почти всегда лучше использовать std::deque. Он тоже имеет константное время доступа к произвольным элементам, но у него существенно быстрее добавление в конец.


Можно об этом поподробнее?

R>а vector<vector<double>> или deque<deque<double>> чем не устраивает?

Теперь, когда понял ошибку, эти варианты устраивают.
Правила нашего с вами форума.
Как правильно задавать вопросы. © 2001 by Eric S. Raymond; перевод: © 2002 Валерий Кравчук.
Re[4]: STL матрица нефиксированного размера
От: Хитрик Денис Россия RSDN
Дата: 23.10.01 06:41
Оценка:
Здравствуйте retalik, Вы писали:

R>Почитай руководство по STL (недавно выложили): http://www.rsdn.ru/article/?cpp/stl.xml
Автор(ы): Александр Степанов, Менг Ли

ОК Спасибо

R>Насколько помню, по скорости произвольного доступа deque проигрывает вектору какие-то мелкие проценты, но у вектора линейное время добавления в конец (если нет резервного места). Зато вектор позволяет обращаться к элементам как к непрерывной области памяти (это какой-то комментарий к C++ Standard был).

R>Если одна размерность более стабильная, можно даже что-то типа vector<deque<>> :)
Всё понятно. Тогда мне больше подойдёт vector<vector<>>. Так как мне нужно было лишь получить от пользователя размерность и потом построить матрицу этой размеронсти, а при использовании она свои размеры менять не будет.

R>А resize ты правильно делаешь.

Замечательно! Значит что-то понял :-)
Правила нашего с вами форума.
Как правильно задавать вопросы. © 2001 by Eric S. Raymond; перевод: © 2002 Валерий Кравчук.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.