Добавление функции Insert_at() в векторC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Добавление функции Insert_at() в вектор

Сообщение Anonymous »

Я обновляю часть (много) старого кода MFC, чтобы заменить CArray на вектор.
Есть одна функция, которая вызывает затруднения, и это функция вставки. Там, где существующий код использует InsertAt() по индексу массива, теперь необходимо использовать итератор Vector, и это меня бесконечно раздражает!
Это не так. Я не выгляжу так плохо, когда это просто

Код: Выделить всё

array.insert(array.begin() + index, 10)
но когда настоящий код это делает...

Код: Выделить всё

class_instance->element_left.local_coordinate_point_array.insert(class_instance->element_left.local_coordinate_point_array.begin() + index, Point2(10,15));
Очень быстро надоедает то, что вам приходится все вводить дважды, это делает код гораздо менее читабельным, и если вы вносите какие-либо изменения, вы должны обязательно их изменить. и то, и другое, иначе вы получите непреднамеренные ошибки... и в большинстве случаев смещение равно нулю. (Я знаю, что вставка в начало массива неэффективна, но вставка выполняется только в критические моменты, не связанные с производительностью, а критическая по времени обработка - это итерация по массиву, копирование, двоичный поиск и т. д.)
Я могу создать функцию шаблона или даже макрос, который позволит

Код: Выделить всё

InsertAt(array, index, 10);
Но это противоречит синтаксису C++, и было бы лучше сохранить его объектно-ориентированным.
Итак, есть ли хороший способ добавить Insert_at< /code> в векторный шаблон, чтобы я мог это сделать

Код: Выделить всё

array.insert_at(index, 10)
Изменить и добавить. Существует много кода, который работает с этими массивами 2D- или 3D-координат, и большая часть его занимается копированием, преобразованием, созданием/удалением. Для большей части этого кода массивы работают намного быстрее, чем списки, особенно благодаря возможности предварительно выделить большой массив, а затем заполнить его данными. Есть только определенные случаи, когда мне нужно вставить новую точку в начало списка или в определенное место.

Подробнее здесь: https://stackoverflow.com/questions/783 ... -to-vector
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»