Указатель на элемент vector

Обновлено: 02.07.2024

Указатель на данные вектора
Имеется функция, которая заполняет вектор данными и возвращает указатель на данные, хранящиеся в.

Указатель на элемент вектора
Добрый день. У меня программа состоит по такому принципу примерно: есть класс контролер, в котором.

Сделать так, чтобы после сортировки вектора указатель показывал на тот же элемент, что и до сортировки
Есть вектор(STL) элементов. У меня есть указатель на определенный элемент. Я хочу сделать так.

Почему указатель, а не ссылку?

Потому что я думал, что на std:: вектор можно только указатели передавать. а так меня любой вариант устроит.

Решение

а о, благадасрствую.

Добавлено через 1 час 19 минут
Еще такой вопрос, а как внутри одной функции ссылаться на вектор, типа так

Добавлено через 48 минут
и вот послений вопрос, я подумал луче, объявлять в структуре массив. то как его правильно обявить далее..

Вот так твой Билдер не умеет? Мой XE8 под x64 запросто сожрал.

Ну, а на первый вопрос:

Так сказано, как будто безнадега. требовать с него много бесполезно и хоть что то взять =)
Да так умеет, спасибо) Ну так озвучь версию Билдера и target-платформу, посмотрим, что можно сделать. Так я написал,что последний пример для указания ссылки на вектор подошел) Единственное осталось только массивы в векторе указать, но это не критично =). а платформа Win7 и билдер берлин =) Сказки мне не рассказывай, что Berlin (он же 10.1) не умеет код из поста №6. XE8 умеет, а версия, вышедшая на год и 2 недели позже - разучилась? Хех, извиняюсь, проверил на Tokyo -> ошибка,а вот домашний берлин схавал Dinkin, Target измени на Win64 - будет использоваться Clang - все будет компилироваться. Так берлин и в 32 компилит. и мне только под 32 и нужно =)

2018 год на дворе. Закачивается. Хорошо хоть 16-битные приложения не собираете :)

Не по теме:
2018 год на дворе. Закачивается. Хорошо хоть 16-битные приложения не собираете :)

А как правильно при таком коде обращаться к переменным структуры?

, например. У тебя указатель на вектор (а не массив указателей), его надо для начала разыменовать, и потом работать как обычно.


Заменить максимальный элемент изначального вектора на первый минимальный элемент изначального вектора
Здравствуйте, помогите составить программу по обработке вектора в Mathcad 15. Необходимо вектор из.

Заменить элементы вектора, равные максимальному, на последний элемент вектора
Если в векторе максимальный элемент встречается больше одного раза, то заменить элементы, равные.


Вывести элемент вектора на пересечении двух элементов этого вектора
Есть 2 переменных Rwork и uр.р, где Rworkпринимает значения от 1 до 3 с шагом 1, а uр.р от 1 до 9 с.


Найти произведение максимального элемента вектора X на минимальный элемент вектора Y.
Задать вектор X, элементы которого представляют собой арифметическую последовательность от pi/16 .

Функция требует в качестве параметра указатель на массив const int* . Требуется передать вектор v<int> .

Эквивалентны ли следующие передачи: &v[0] и v.begin() ?

Вопрос в том, почему у вас такая странная функция. Переделайте её, делов-то. @VladD функция может требовать указатель, т.к. написана на c например. Или уже имеется рабочий интерфейс. А std::vector довольно легко можно подружить с нативным указателем там где надо. @alexolut: Ну так тогда не надо использовать это функцию. Надо переписать её в шаблонный вариант, чтобы принимала два итератора. Тогда и проблем с <s>натягиванием совы</s> конвертацией типов данных не будет. @VladD Вы не поняли, видимо. Допустим есть библиотека (исключительно в бинарном виде), и одна из функций в этой библиотеке принимает const int* . Вы не можете переписать эту функцию, или что-либо вообще в этой библиотеке. @alexolut: Такое бывает, да. Но в нормальных случаях исходники есть, и такое не нужно. Вангую, что и в данном случае исходники есть.

v.begin() возвращает итератор, это не const int* .
&*v.begin() , &v[0] и v.data() - эквивалентны.

Использование v.data() предпочтительнее, т.к. оно лучше передает намерение.

30k 12 12 золотых знаков 89 89 серебряных знаков 146 146 бронзовых знаков Кроме намерения, это ещё и единственная функция(из предложенных), которая может быть выполнена на пустом векторе Тип итератора implementation-defined , так что формально он может быть и обычным указателем. @ixSci любопытно, что для std::basic_string &v[0] можно вызывать и на пустом контейнере. Главное, не писать туда. @alexolut, это больше похоже на недосмотр в стандарте, к тому же у меня вызывает вопрос тот факт, что в описании begin() говорится, что возвращает итератор на первый элемент, но первого элемента в пустой строке нет. Мне кажется, хотя это явно и не написано, подобное поведение не разрешено, хотя и будет работать почти везде, за счёт SSO. @ixSci удивительно быстро кто-то задал подходящий вопрос. Вот мой ответ со сноской на Стандарт в том числе.

Нет, не эквивалентны, т.к. v.begin() возвращает итератор (т.е. std::vector<int>::iterator ) на первый элемент vector<int> , а &v[0] указатель на адрес в памяти, где расположен элемент из vector'а (т.е. int* ).

Соответственно, интерфейс работы с такими типами различен, но, опять же, никто не запрещает разыменовать итератор (но предварительно следует проверить не указывает ли итератор на на v.end() ), а затем взять адрес полученного элемента.

А так как vector эмулирует работу стандартного массива C (например, быстрый произвольный доступ к элементам), то все элементы в нем располагаются общим скопом (т.е. располагаются подряд в памяти), поэтому вам подойдет способ передачи &v[0] , а перемещение по элементам массива через operator ++ примененный к параметру функции, например.

Но в таком случае вам стоит заранее обдумать каким именно образом вы будете учитывать границы массива:

У меня конечно закралась мысль что так не делается и это через одно место. Но пока я не менял вектор players всё работало.
Работало. пока не переключил из debug в release
Ну и конечно-же мой гомно-код работать перестал.

Отсюда вопрос. Как правильно хранить обьекты (ну думаю вектор это нормально).
И как хранить в других обьектах ссылки/указатели на эти самые обьекты?
Или мне надо каждый раз когда я хочу что-то сделать с определённым игроком пересматривать весь вектор с ними чтоб найти его (по номеру например) ?
Или не использовать вектор вообще как удобную замену new и делете, рас мне надо произвольно обращатся к его элементам, и хранить их индексы гдето.

Помощь в написании контрольных, курсовых и дипломных работ здесь.


Error C3867 при вызове функции erase и insert для двумерного вектора
Тренируюсь с использованием контейнера std::vector. Появляется ошибка при удалении и вставке.

Сделать так, чтобы после сортировки вектора указатель показывал на тот же элемент, что и до сортировки
Есть вектор(STL) элементов. У меня есть указатель на определенный элемент. Я хочу сделать так.


Указатель на элемент вектора
Добрый день. есть три вектора с обсолютно одинаковой структурой struct ObjectColor < int .

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Сделать так, чтобы после сортировки вектора указатель показывал на тот же элемент, что и до сортировки
Есть вектор(STL) элементов. У меня есть указатель на определенный элемент. Я хочу сделать так.


Вернуть указатель вместо вектора
Здравствуйте, Я использую библиотеку для визуализации QWT . Создаю объект QwtLinearColorMap*.

phtnr, на будущее: когда ставишь вопрос, старайся излагать саму суть.
В данном случае контроллеры, модули, тесты и т.п. к сути вопроса отношения не имеют.
А вопрос, как я понял, следующий: гарантируется ли, что при добавлении элементов в
вектор указатели на его элементы (итераторы) останутся валидными?

Ответ: гарантируется, но только до первой переаллокации вектора (т.е. когда ему
не хватает места и происходит перераспределение памяти). Так что здесь вместо
вектора лучше взять что-нибудь другое.

Читайте также: