У меня есть список отрезков (в std::vector<std::pair<int, int> >
, что я хотел бы перебирать и подразделяют алгоритм будет, в psuedocode:Как перебрать список, добавляя в нее элементы
for segment in vectorOfSegments:
firstPoint = segment.first;
secondPoint = segment.second;
newMidPoint = (firstPoint + secondPoint)/2.0
vectorOfSegments.remove(segment);
vectorOfSegments.push_back(std::make_pair(firstPoint, newMidPoint));
vectorOfSegments.push_back(std::make_pair(newMidPoint, secondPoint));
Проблема, с которой я сталкиваюсь, заключается в том, как я могу push_back
новых элементов (и удалять старые элементы) без повторения этого списка навсегда.
Похоже, что наилучшим подходом может быть сделать копию этого вектора сначала, и используйте копию в качестве ссылки, clear()
оригинальный вектор, а затем push_back
новый элемент s к недавно опустошенному вектору.
Есть ли лучший подход к этому?
Какова ваша конечная цель? Разделить каждую пару только один раз? Поэтому, если у меня есть {<2,4>, <10,20>}, результатом будет {<2,3>, <3,4>, <10,15>, <15,20>}? –
Dupe этого? http://stackoverflow.com/questions/5638323/modification-a-data-structure-while-iterating-over-it Хорошие ссылки, тем не менее. –
Моя цель состояла бы в том, чтобы рассматривать каждую пару как точку в пространстве и находить средние точки. {<2,4>, <10,20>} будет {<2,4>, <6,12>, <10,20>}, например. Я хотел бы иметь возможность разделить список столько раз, сколько захочу. –