#cpp
Код я не буду сбрасывать, так как его нет, есть только та часть, которая не поможет понять саму суть программы, но попробую объяснить на примере. Допустим, у меня есть последовательность точек {112, 1, 30, 69, 3, 29, 74, 23, 12} и моей начальной точкой является 30, в то время как конечной является точка 23. Что мне нужно сделать, чтобы я рассматривал лишь точки {30, 69, 3, 29, 74, 23} и вывел на экран, что именно эти точки находятся между начальной и конечной точками. Код внизу, это как мысль, которая была у меня, но я не могу докончить, так как если я начинаю с 30, как дальше сделать так, чтобы она взяла именно 69. Дистанцию не могу использовать, так как дистанция между 1 и 30 меньше чем дистанция между 30 и 69. Но я верю, что есть какая-то логика или как-то это возможно построить. Возможно моя начальная логика построена неправильно, я буду рад изменениям. while(current!=end) { for(points= theVectorOfPoint.begin();points!=theVectorOfPointe.end();points++) { } }
Ответы
Ответ 1
Вот мой вариант. /* Отвечает за номер точки */ current = 0; /* Note: Для 30 можно отдельную переменную завести и для 23 */ /* В цикле находим номер точки, равной 30 */ while (points[current] != 30) { current++; } /* И выводим все точки с 30 по 23, найдя которую выходим из цикла */ while (current < end) { cout << points[current] << " "; if (points[current] == 23) { break; } current++; }Ответ 2
Вот немного stl-style. Правда используются возможности C++11, но можно легко обойтись без них #include#include #include #include int main(){ std::vector v = {112, 1, 30, 69, 3, 29, 74, 23, 12}; std::vector ::const_iterator first = std::find(v.cbegin(), v.cend(), 30); std::vector ::const_iterator last = std::find(first, v.cend(), 23) + 1; std::copy(first, last, std::ostream_iterator (std::cout, " ")); }
Комментариев нет:
Отправить комментарий