|
|
|
Динамический массив
|
|||
|---|---|---|---|
|
#18+
Здравствуйте, такой вопрос, нужна какя нибудь структура или динамический массив, которая удобно динамически добавляет и удаляет элементы, но и одновременно предоставляет доступ к указателю на массив. Посоветуйте что нибудь. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2007, 17:20 |
|
||
|
Динамический массив
|
|||
|---|---|---|---|
|
#18+
std::vector тип последовательного контейнера, который используется в большинстве случаев; std::list используется, если нужно часто вставлять или удалять елементы в произвольной позиции; std::deque если большинство вставок или удалений производится в начале или конце. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2007, 18:23 |
|
||
|
Динамический массив
|
|||
|---|---|---|---|
|
#18+
насчёт списка - неправда, потому как он не предоставляет доступ по индексу, в чём заключается основное свойство массива. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2007, 22:27 |
|
||
|
Динамический массив
|
|||
|---|---|---|---|
|
#18+
Все это понятно, но в конкретном случае , есть изменяющийся массив объектов ядра, который нужно подавать в функцию ожидания. если я использую например вектор, то как мне запихнуть его в эту функцию. Код: plaintext 1. 2. 3. 4. 5. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2007, 17:47 |
|
||
|
Динамический массив
|
|||
|---|---|---|---|
|
#18+
А если так попробовать? (: Код: plaintext 1. 2. 3. 4. или так?: Код: plaintext 1. 2. 3. 4. судя по содержимому <vector>, оба варианта должны работать без ошибок. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2007, 19:21 |
|
||
|
Динамический массив
|
|||
|---|---|---|---|
|
#18+
Только для std::vector есть гарантия непрерывного размещения элементов в памяти, следовательно валидным является вариант только c std::vector: Код: plaintext 1. 2. 3. для std::deque нет такой гарантии. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.02.2007, 19:46 |
|
||
|
Динамический массив
|
|||
|---|---|---|---|
|
#18+
Большущее СПАСИБО!!!!))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.02.2007, 16:51 |
|
||
|
Динамический массив
|
|||
|---|---|---|---|
|
#18+
Анатолий ШироковТолько для std::vector есть гарантия непрерывного размещения элементов в памяти, следовательно валидным является вариант только c std::vector: ... Гарантии на размер элемента массива нет. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2007, 09:51 |
|
||
|
Динамический массив
|
|||
|---|---|---|---|
|
#18+
AkhГарантии на размер элемента массива нет. :) Это вы о чем? Я говорил о гарантии непрерывного размещения элементов в памяти. Где вы прочитали о размере элемента - не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2007, 11:06 |
|
||
|
Динамический массив
|
|||
|---|---|---|---|
|
#18+
Анатолий Широков AkhГарантии на размер элемента массива нет. :) Это вы о чем? Я говорил о гарантии непрерывного размещения элементов в памяти. Где вы прочитали о размере элемента - не знаю. В выводе о валидности результата. В последующих версиях между элементами могут появиться и метаданные. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2007, 11:12 |
|
||
|
Динамический массив
|
|||
|---|---|---|---|
|
#18+
AkhВ выводе о валидности результата. В последующих версиях между элементами могут появиться и метаданные. Бред. Пока это так и никто не собирается эту гарантию отменять. Или вы программируете исходя из того, что в будущем вся STL может быть отменена? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2007, 11:25 |
|
||
|
Динамический массив
|
|||
|---|---|---|---|
|
#18+
Анатолий Широков AkhВ выводе о валидности результата. В последующих версиях между элементами могут появиться и метаданные. Бред. Пока это так и никто не собирается эту гарантию отменять. Или вы программируете исходя из того, что в будущем вся STL может быть отменена? Придется для вас разжевать. Приближенно выглядит так: В векторе есть гарантия, что элементы массива размещены по порядку, но нет гарантии, что размер элемента массива равен размеру типа данных вектора. Или же вы программируете исходя из того :7, что в текущей реализации размер элемента массива в вектор раверн размеру заданных данных. Думаю, что и того изложения вам будет не достаточно для понимания. Тогда объясню на пальцах: Вот вы задали вектор HANDLE. Положили туда сто пятнадцать указателей. Вектор из разместил по очереди, но не гарантировал вам, что они идут плотную друг за другом; и оставил по 2 байта между ними для мета данных (ну, там типа, индексация, новые улучшения, т.д. и т.п.). Вы, наивно, предпологая, что данные идут вслед за другом, передали их в функцию, котороя предполагает, что ей дали указатель на массив HANDLE. Она не предполагала, что разработчик подсунет ей ссылку на элемент вектора. Первый элемент оказался правельноым, а вот второй получил в два наименее значимых байта метаданные, а остальные сдвинутыми. В итоге, второй HANDLE был испорчен. И это при том, что вектор гарантирует вам, что элементы будут распологаться по очереди. Вы можете и это бредом посчитать, но знайте, что в данном случае вы испольуетете данные о которых не имеете полное представление в случае, когда знание полного представления необходимо. Советовать ничего вам не буду, но обращу ваше внимание, что объекты необходимо использовать по назначению, и нет смысла использовать их внутереннюю конкретную реализацию, там где от вас ждут простых вещей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2007, 11:54 |
|
||
|
Динамический массив
|
|||
|---|---|---|---|
|
#18+
Анатолий ШироковТолько для std::vector есть гарантия непрерывного размещения элементов в памяти, следовательно валидным является вариант только c std::vector: Код: plaintext 1. 2. 3. для std::deque нет такой гарантии. Я бы такой гарантии не давал. Есть гаранития коррекнтой работы operaror[] & iterator. Которые, с свойю очередь, могут делает преобразования. Вычисление адреса обьекта другими средствами могут быть опасны. На реализацию Allocator нужно смотреть в каждом конкретном случае. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2007, 12:10 |
|
||
|
Динамический массив
|
|||
|---|---|---|---|
|
#18+
2 onstat- Посмотрите стандарт, чтобы убедится, что эта гарантия есть. То что вы ее не даете, согласитесь, мало кого волнует. 2 Akh Спасибо за разжовывание, но по-моему вы так и не поняли, что значит последовательное размещение элементов в памяти - это такое размещение элементов при котором, адрес следующего элемента вычисляется как адрес текущего элемента + sizeof(тип элемента) - именно за счет этого операция индексации [] имеет сложность O(1). Вы в следующий раз, чтобы вот так не позорится, всеже поднимите какой-нибудь материал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2007, 12:59 |
|
||
|
Динамический массив
|
|||
|---|---|---|---|
|
#18+
Анатолий ШироковСпасибо за разжовывание, но по-моему вы так и не поняли, что значит последовательное размещение элементов в памяти - это такое размещение элементов при котором, адрес следующего элемента вычисляется как адрес текущего элемента + sizeof(тип элемента) - именно за счет этого операция индексации [] имеет сложность O(1). Вы в следующий раз, чтобы вот так не позорится, всеже поднимите какой-нибудь материал. Вы ошибаетесь, считая, что сложность по времени O(1) операции [] достигается только за счет размещения элементов непосредственно друг за другом. Специально для вас поднял материал: Язык программирования С++. Специальное издание. Бьерн Страуструп. 17.1.3 Стандарт не предписывает специального представления для каждого стандартного контейнера. Или вы будете и дальше спорить? ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2007, 13:48 |
|
||
|
Динамический массив
|
|||
|---|---|---|---|
|
#18+
С чем спорить, с вашим невежеством? Пожалуй воздержусь. А вот на счет гарантии непрерывностого размещения элементов в std::vector буду: автор23.2.4 Class template vector 1 A vector is a kind of sequence that supports random access iterators. In addition, it supports (amortized) constant time insert and erase operations at the end; insert and erase in the middle take linear time. Storage management is handled automatically, though hints can be given to improve efficiency. The elements of a vector are stored contiguously, meaning that if v is a vector<T, Allocator> where T is some type other than bool, then it obeys the identity &v[n] == &v[0] + n for all 0 <= n < v.size(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2007, 13:59 |
|
||
|
Динамический массив
|
|||
|---|---|---|---|
|
#18+
Анатолий ШироковС чем спорить, с вашим невежеством? Пожалуй воздержусь. А вот на счет гарантии непрерывностого размещения элементов в std::vector буду: автор23.2.4 Class template vector 1 A vector is a kind of sequence that supports random access iterators. In addition, it supports (amortized) constant time insert and erase operations at the end; insert and erase in the middle take linear time. Storage management is handled automatically, though hints can be given to improve efficiency. The elements of a vector are stored contiguously, meaning that if v is a vector<T, Allocator> where T is some type other than bool, then it obeys the identity &v[n] == &v[0] + n for all 0 <= n < v.size(). Ну, и что вы думаете я на это отвечу? Сейчас тоже насочиняю, номер припишу и выложу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2007, 14:08 |
|
||
|
Динамический массив
|
|||
|---|---|---|---|
|
#18+
Это цитата из стандарта. Я вам уже давал линк на стандарт, то что вы неудосужились его открыть - это ваша проблема. На этом я заканчиваю дискутировать с вами. Пишите как хотите, но не сбивайте с толку людей своим ИМХО. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2007, 14:15 |
|
||
|
Динамический массив
|
|||
|---|---|---|---|
|
#18+
Анатолий Широков2 onstat- Посмотрите стандарт, чтобы убедится, что эта гарантия есть. То что вы ее не даете, согласитесь, мало кого волнует. Точной гарантии я ненашел, зато в первом же абзаце : 23.2.4 Template class vector A vector is kind of sequence that supports random access iterators. In addition, it supports amortized constant time insert and erase operations at the end. Insert and erase in the middle take linear time. Storage management is handled automatically, though hints can be given to improve efficiency. То что дальше там написано о количестве вызовов и реалокаций однозначно не говорит о том что данные распологаются неприрывно. Учитывая что размер вектора теоретически неограничен. Если не тяжело , приведите цитату подтверждающую гарантию непрерывного выделение памяти для вектора. Мне самому интересно найти это место. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2007, 14:23 |
|
||
|
Динамический массив
|
|||
|---|---|---|---|
|
#18+
Анатолий Широков автор23.2.4 Class template vector The elements of a vector are stored contiguously, meaning that if v is a vector<T, Allocator> where T is some type other than bool, then it obeys the identity &v[n] == &v[0] + n for all 0 <= n < v.size(). В моем тексе (first edition 1998-09-01 ) этого нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2007, 14:30 |
|
||
|
Динамический массив
|
|||
|---|---|---|---|
|
#18+
Этого автор vector are stored contiguously, meaning that if v is a vector<T, Allocator> where T is some type other than bool, then it obeys the identity &v[n] == &v[0] + n for all 0 <= n < v.size(). Прошу прощения. з.ыю почему нельзя редактировать сообщения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2007, 14:32 |
|
||
|
Динамический массив
|
|||
|---|---|---|---|
|
#18+
Анатолий Широков2 onstat- Посмотрите стандарт, чтобы убедится, что эта гарантия есть. То что вы ее не даете, согласитесь, мало кого волнует. Сейчас это в первую очередь волнует меня. Какая у Вас версия ? У меня : ISO/IEC 14882 first edition 1998-09-01 Date of ANSI Аpproval: 7/27/98 Reference number: ISO/IEC 14882:1998(E) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2007, 15:32 |
|
||
|
Динамический массив
|
|||
|---|---|---|---|
|
#18+
Я вам отправил на указанный вами в профиле почтовый ящик стандарт 2003 года. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2007, 15:34 |
|
||
|
Динамический массив
|
|||
|---|---|---|---|
|
#18+
Анатолий ШироковЭто цитата из стандарта. Я вам уже давал линк на стандарт, то что вы неудосужились его открыть - это ваша проблема. На этом я заканчиваю дискутировать с вами. Пишите как хотите, но не сбивайте с толку людей своим ИМХО . то алл: Попонтаваться и убежать - не считаю положительной чертой образованного человека. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.02.2007, 15:40 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=34352926&tid=2029363]: |
0ms |
get settings: |
7ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
198ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 523ms |

| 0 / 0 |
