Я обновляю часть (много) старого кода MFC, чтобы заменить CArray на вектор.
Есть одна функция, которая вызывает затруднения, и это функция вставки. Там, где существующий код использует InsertAt() по индексу массива, теперь необходимо использовать итератор Vector, и это меня бесконечно раздражает!
Это не так. Я не выгляжу так плохо, когда это просто
но когда настоящий код это делает...
Код: Выделить всё
class_instance->element_left.local_coordinate_point_array.insert(class_instance->element_left.local_coordinate_point_array.begin() + index, Point2(10,15));
Очень быстро надоедает то, что вам приходится все вводить дважды, это делает код гораздо менее читабельным, и если вы вносите какие-либо изменения, вы должны обязательно их изменить. и то, и другое, иначе вы получите непреднамеренные ошибки... и в большинстве случаев смещение равно нулю. (Я знаю, что вставка в начало массива неэффективна, но вставка выполняется только в критические моменты, не связанные с производительностью, а критическая по времени обработка - это итерация по массиву, копирование, двоичный поиск и т. д.)
Я могу создать функцию шаблона или даже макрос, который позволит
Но это противоречит синтаксису C++, и было бы лучше сохранить его объектно-ориентированным.
Итак, есть ли хороший способ добавить Insert_at< /code> в векторный шаблон, чтобы я мог это сделать
Изменить и добавить. Существует много кода, который работает с этими массивами 2D- или 3D-координат, и большая часть его занимается копированием, преобразованием, созданием/удалением. Для большей части этого кода массивы работают намного быстрее, чем списки, особенно благодаря возможности предварительно выделить большой массив, а затем заполнить его данными. Есть только определенные случаи, когда мне нужно вставить новую точку в начало списка или в определенное место.
Подробнее здесь:
https://stackoverflow.com/questions/783 ... -to-vector