powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Динамический массив
25 сообщений из 61, страница 1 из 3
Динамический массив
    #34352199
dimadv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, такой вопрос, нужна какя нибудь структура или динамический массив, которая удобно динамически добавляет
и удаляет элементы, но и одновременно предоставляет доступ к указателю на массив.

Посоветуйте что нибудь.
...
Рейтинг: 0 / 0
Динамический массив
    #34352261
man_555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
std::vector
...
Рейтинг: 0 / 0
Динамический массив
    #34352272
Lexogen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
std::vector
тип последовательного контейнера, который используется в большинстве случаев;
std::list
используется, если нужно часто вставлять или удалять елементы в произвольной позиции;
std::deque
если большинство вставок или удалений производится в начале или конце.
...
Рейтинг: 0 / 0
Динамический массив
    #34352437
man_555
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
насчёт списка - неправда, потому как он не предоставляет доступ по индексу, в чём заключается основное свойство массива.
...
Рейтинг: 0 / 0
Динамический массив
    #34352926
dimadv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все это понятно, но
в конкретном случае , есть изменяющийся массив объектов ядра, который нужно подавать в функцию ожидания. если я использую например вектор, то как мне запихнуть его в эту функцию.

Код: plaintext
1.
2.
3.
4.
5.
HANDLE h[ 2 ];
h[ 0 ] = hAutoResetEvent1; // изначально занят
h[ 1 ] = hAutoResetEvent2; // изначально занят

WaitForMultipleObjects( 2 , h, TRUE, INFINITE);

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
vector<HANDLE*> h;

h.push_back(&Event1);
h.push_back(&Event2);

h[ 0 ] = hAutoResetEvent1; // изначально занят
h[ 1 ] = hAutoResetEvent2; // изначально занят

WaitForMultipleObjects( 2 , h, TRUE, INFINITE);
...
Рейтинг: 0 / 0
Динамический массив
    #34353001
ErV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если так попробовать? (:
Код: plaintext
1.
2.
3.
4.
	std::deque<HANDLE> threads;
	threads.push_back(CreateThread(/*...*/));
	threads.push_back(CreateThread(/*...*/));
	WaitForMultipleObjects( 2 , (&threads.at( 0 )), TRUE, INFINITE);

или так?:
Код: plaintext
1.
2.
3.
4.
	std::vector<HANDLE> threads;
	threads.push_back(CreateThread(/*...*/));
	threads.push_back(CreateThread(/*...*/));
	WaitForMultipleObjects( 2 , &(*threads.begin()), TRUE, INFINITE);


судя по содержимому <vector>, оба варианта должны работать без ошибок.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
//vector из MSVS2005

	reference at(size_type _Pos)
		{	// subscript mutable sequence with checking
		if (size() <= _Pos)
			_Xran();
		return (*(begin() + _Pos));
		}
...
Рейтинг: 0 / 0
Динамический массив
    #34353020
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только для std::vector есть гарантия непрерывного размещения элементов в памяти, следовательно валидным является вариант только c std::vector:

Код: plaintext
1.
2.
3.
std::vector<HANDLE> threads;
threads.push_back(CreateThread(/*...*/));
threads.push_back(CreateThread(/*...*/));
WaitForMultipleObjects( 2 , &threads[ 0 ], TRUE, INFINITE);

для std::deque нет такой гарантии.
...
Рейтинг: 0 / 0
Динамический массив
    #34353531
dimadv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большущее СПАСИБО!!!!)))
...
Рейтинг: 0 / 0
Динамический массив
    #34354118
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ШироковТолько для std::vector есть гарантия непрерывного размещения элементов в памяти, следовательно валидным является вариант только c std::vector:
...

Гарантии на размер элемента массива нет. :)
...
Рейтинг: 0 / 0
Динамический массив
    #34354318
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkhГарантии на размер элемента массива нет. :)

Это вы о чем? Я говорил о гарантии непрерывного размещения элементов в памяти. Где вы прочитали о размере элемента - не знаю.
...
Рейтинг: 0 / 0
Динамический массив
    #34354335
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий Широков AkhГарантии на размер элемента массива нет. :)

Это вы о чем? Я говорил о гарантии непрерывного размещения элементов в памяти. Где вы прочитали о размере элемента - не знаю.

В выводе о валидности результата. В последующих версиях между элементами могут появиться и метаданные.
...
Рейтинг: 0 / 0
Динамический массив
    #34354378
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkhВ выводе о валидности результата. В последующих версиях между элементами могут появиться и метаданные.

Бред. Пока это так и никто не собирается эту гарантию отменять. Или вы программируете исходя из того, что в будущем вся STL может быть отменена?
...
Рейтинг: 0 / 0
Динамический массив
    #34354483
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий Широков AkhВ выводе о валидности результата. В последующих версиях между элементами могут появиться и метаданные.

Бред. Пока это так и никто не собирается эту гарантию отменять. Или вы программируете исходя из того, что в будущем вся STL может быть отменена?

Придется для вас разжевать. Приближенно выглядит так:

В векторе есть гарантия, что элементы массива размещены по порядку, но нет гарантии, что размер элемента массива равен размеру типа данных вектора. Или же вы программируете исходя из того :7, что в текущей реализации размер элемента массива в вектор раверн размеру заданных данных.

Думаю, что и того изложения вам будет не достаточно для понимания. Тогда объясню на пальцах:

Вот вы задали вектор HANDLE. Положили туда сто пятнадцать указателей. Вектор из разместил по очереди, но не гарантировал вам, что они идут плотную друг за другом; и оставил по 2 байта между ними для мета данных (ну, там типа, индексация, новые улучшения, т.д. и т.п.). Вы, наивно, предпологая, что данные идут вслед за другом, передали их в функцию, котороя предполагает, что ей дали указатель на массив HANDLE. Она не предполагала, что разработчик подсунет ей ссылку на элемент вектора. Первый элемент оказался правельноым, а вот второй получил в два наименее значимых байта метаданные, а остальные сдвинутыми. В итоге, второй HANDLE был испорчен. И это при том, что вектор гарантирует вам, что элементы будут распологаться по очереди.

Вы можете и это бредом посчитать, но знайте, что в данном случае вы испольуетете данные о которых не имеете полное представление в случае, когда знание полного представления необходимо. Советовать ничего вам не буду, но обращу ваше внимание, что объекты необходимо использовать по назначению, и нет смысла использовать их внутереннюю конкретную реализацию, там где от вас ждут простых вещей.
...
Рейтинг: 0 / 0
Динамический массив
    #34354531
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ШироковТолько для std::vector есть гарантия непрерывного размещения элементов в памяти, следовательно валидным является вариант только c std::vector:

Код: plaintext
1.
2.
3.
std::vector<HANDLE> threads;
threads.push_back(CreateThread(/*...*/));
threads.push_back(CreateThread(/*...*/));
WaitForMultipleObjects( 2 , &threads[ 0 ], TRUE, INFINITE);

для std::deque нет такой гарантии.

Я бы такой гарантии не давал.

Есть гаранития коррекнтой работы operaror[] & iterator.
Которые, с свойю очередь, могут делает преобразования.
Вычисление адреса обьекта другими средствами могут быть опасны.

На реализацию Allocator нужно смотреть в каждом конкретном случае.
...
Рейтинг: 0 / 0
Динамический массив
    #34354691
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 onstat-

Посмотрите стандарт, чтобы убедится, что эта гарантия есть. То что вы ее не даете, согласитесь, мало кого волнует.

2 Akh

Спасибо за разжовывание, но по-моему вы так и не поняли, что значит последовательное размещение элементов в памяти - это такое размещение элементов при котором, адрес следующего элемента вычисляется как адрес текущего элемента + sizeof(тип элемента) - именно за счет этого операция индексации [] имеет сложность O(1).

Вы в следующий раз, чтобы вот так не позорится, всеже поднимите какой-нибудь материал.
...
Рейтинг: 0 / 0
Динамический массив
    #34354872
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ШироковСпасибо за разжовывание, но по-моему вы так и не поняли, что значит последовательное размещение элементов в памяти - это такое размещение элементов при котором, адрес следующего элемента вычисляется как адрес текущего элемента + sizeof(тип элемента) - именно за счет этого операция индексации [] имеет сложность O(1).

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


Вы ошибаетесь, считая, что сложность по времени O(1) операции [] достигается только за счет размещения элементов непосредственно друг за другом.

Специально для вас поднял материал:
Язык программирования С++. Специальное издание. Бьерн Страуструп. 17.1.3
Стандарт не предписывает специального представления для каждого стандартного контейнера.

Или вы будете и дальше спорить? ;)
...
Рейтинг: 0 / 0
Динамический массив
    #34354900
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С чем спорить, с вашим невежеством? Пожалуй воздержусь. А вот на счет гарантии непрерывностого размещения элементов в 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().
...
Рейтинг: 0 / 0
Динамический массив
    #34354934
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ШироковС чем спорить, с вашим невежеством? Пожалуй воздержусь. А вот на счет гарантии непрерывностого размещения элементов в 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().

Ну, и что вы думаете я на это отвечу? Сейчас тоже насочиняю, номер припишу и выложу.
...
Рейтинг: 0 / 0
Динамический массив
    #34354951
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это цитата из стандарта. Я вам уже давал линк на стандарт, то что вы неудосужились его открыть - это ваша проблема. На этом я заканчиваю дискутировать с вами. Пишите как хотите, но не сбивайте с толку людей своим ИМХО.
...
Рейтинг: 0 / 0
Динамический массив
    #34354975
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий Широков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.

То что дальше там написано о количестве вызовов и реалокаций
однозначно не говорит о том что данные распологаются неприрывно.
Учитывая что размер вектора теоретически неограничен.

Если не тяжело , приведите цитату подтверждающую гарантию непрерывного выделение памяти для вектора.

Мне самому интересно найти это место.
...
Рейтинг: 0 / 0
Динамический массив
    #34355002
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий Широков

автор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 ) этого нет.
...
Рейтинг: 0 / 0
Динамический массив
    #34355014
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Этого
автор
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().


Прошу прощения.

з.ыю почему нельзя редактировать сообщения?
...
Рейтинг: 0 / 0
Динамический массив
    #34355232
onstat-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий Широков2 onstat-

Посмотрите стандарт, чтобы убедится, что эта гарантия есть. То что вы ее не даете, согласитесь, мало кого волнует.



Сейчас это в первую очередь волнует меня.

Какая у Вас версия ?

У меня :

ISO/IEC 14882 first edition 1998-09-01
Date of ANSI Аpproval: 7/27/98
Reference number: ISO/IEC 14882:1998(E)
...
Рейтинг: 0 / 0
Динамический массив
    #34355240
Фотография Анатолий Широков
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вам отправил на указанный вами в профиле почтовый ящик стандарт 2003 года.
...
Рейтинг: 0 / 0
Динамический массив
    #34355260
Akh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Анатолий ШироковЭто цитата из стандарта. Я вам уже давал линк на стандарт, то что вы неудосужились его открыть - это ваша проблема. На этом я заканчиваю дискутировать с вами. Пишите как хотите, но не сбивайте с толку людей своим ИМХО .

то алл:

Попонтаваться и убежать - не считаю положительной чертой образованного человека.
...
Рейтинг: 0 / 0
25 сообщений из 61, страница 1 из 3
Форумы / C++ [игнор отключен] [закрыт для гостей] / Динамический массив
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]