Добавление функции 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

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