Как скопировать весь вектор в очередь в обратном порядке? - PullRequest
0 голосов
/ 11 апреля 2019

Мой вектор хранит номера вершин определенного графа в порядке возрастания.Я хочу добавить эти числа в очередь, чтобы потом запустить BFS в коде, но я не знаю, как это сделать быстро и качественно.Я хочу, чтобы решение было понятным для всех, и то, с чем я пришел, на мой взгляд, неясно.Отказ от ответственности - я использую статические приведения, потому что я ненавижу видеть предупреждения, когда я работаю с Qt.Вот что сделал:

Использование случайного цикла for для итерации в обратном порядке по вектору, начинающемуся с size-1 и заканчивающемуся, когда i равно -1.Поскольку я использую -1, как правило, мне нужно привести все к int, что делает код ужасным.

vector<unsigned> v;
v.pushback(2);
v.pushback(3);
v.pushback(5);

queue<unsigned> q;

for(int i = static_cast<int>(v.size()-1); i>=0; i--)
    q.push(v[static_cast<unsigned>(i)];

Может кто-нибудь сказать мне, как это делают профессионалы?Не могу найти что-то вроде функции «копировать в обратном порядке», которая может начинаться с элемента .end()-1 и копировать все элементы, включая .begin() one?

1 Ответ

2 голосов
/ 11 апреля 2019

std::vector предоставляет функции rbegin и rend, которые возвращают обратные итераторы, которые можно использовать для итерации от задней части к передней.Используя их, вы можете использовать std::for_each для итерации вектора, а затем использовать lambda в качестве функтора для помещения каждого элемента в очередь.Это будет выглядеть как

std::vector<int> v = {1, 2, 3};
std::queue<int> q;
std::for_each(v.rbegin(), v.rend(), [&q](auto el){ q.push(el); });
...