| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Массив переменной длинны |
| Автор: decembrist 23.9.2004, 11:28 |
| Как задать массив, если его длина определяется в процессе вычисленний программы? В данном случае vector не подходит |
| Автор: Borisff2003 23.9.2004, 11:31 | ||
|
| Автор: cardinal 23.9.2004, 11:42 |
| или читай тут: http://forum.vingrad.ru/index.php?showtopic=28161 |
| Автор: srd 23.9.2004, 12:05 |
| А почему не подходит vector? |
| Автор: decembrist 23.9.2004, 13:59 | ||||
| Я использую ф-цию setValues(starting index, member of values, pointer to array of values) Например если
то
то есть я не могу подставить в качестве третьего аргумента vector. Его надо как то перевести в array. |
| Автор: Borisff2003 23.9.2004, 14:12 | ||
А вот такое работает
|
| Автор: DENNN 23.9.2004, 14:13 | ||
Достаточно передать итератор на первый элемент. А вообще, раз такой вопрос возник, значит не слишком хорошо STL освоил - книги в руки и просвещаться Добавлено @ 14:16 Borisff2003 В твоем примере вызываемая функция ничего не знает о том, сколько элементов в контейнере. Кроме того, происходит явное преобразование типов из итератора в (int*), по данному стандарту оно работает, но ведь иераторами не просто так пользуются |
| Автор: decembrist 23.9.2004, 14:41 | ||
ссылки есть какие-нибудь? Нет у меня подходящих книг кроме Страуструпа |
| Автор: Dark Elf 23.9.2004, 15:53 |
| ИМХО, Страуструп как раз для этого и подходит. А ещё на RSDN.RU есть описание STL (в CHM-формате) |
| Автор: Borisff2003 24.9.2004, 05:20 |
| DENNN Ну так я пример давал, decembrist надо связать старый код и STL так что думаю у него функция получще выглядит, да и насколько я понимаю, vector так и описан в стандарте, чтобы быть полностью совместимым с массивами в классическом виде. Тут либо преобразовывать, либо описание функции немного переделать(если код есть) |
| Автор: decembrist 24.9.2004, 10:45 | ||
ф-ция стандартная. А преобразовать -то как можно? |
| Автор: Adil' 24.9.2004, 12:07 |
| decembrist, я бы на твоем месте сначала разобрался с указателями, т. е. сделал бы как Borisff2003 (сообщение №2) предложил. Не зная указателей за STL хвататься - не хорошо как то. Вот освоишься с ними более-менее, тогда можно и за STL взяться (если захочешь З.Ы. Это мое ИМХО. |
| Автор: Vyacheslav 24.9.2004, 12:45 | ||
| В современной исправленной редакции(изменение от сетнября 2002 года ISO/IEC 14882:2002(3)) стандарт требует, что бы vector выполнял следующие условия &v[n] == &v[0] + n for all 0<= n < v.size() То есть элементы вектора должны располагаться в памяти непрерывно. Таким образом преобразование вектора к обычному массиву производится получением адреса на первый элемент вектора и если используемая редакция STL отвечает стандарту, то вполне справдлив следущей код
Кстати в ранее действующющей редакции стандарта ISO/IEC 14882:1998(E) это никак не регламентировалось, и такой код в различных реализациях STL мого приводить к ошибке и соответственно такое использование рассматривалась как грубейшая ошибка |
| Автор: decembrist 24.9.2004, 14:50 |
| Большое всем спасибо! |
| Автор: mr.DUDA 24.9.2004, 21:18 | ||
2 decembrist,
Вам сюда: http://forum.vingrad.ru/index.php?showtopic=16860 |