Как мне дублировать элемент в 2d vector c ++ и поместить его рядом с оригинальным элементом - PullRequest
0 голосов
/ 26 сентября 2018
std::vector<std::vector<char> > fog { { 'a', 'b', 'c'  },
                                    { 'f', 'g', 'a' } };

Вышеупомянутый вектор должен превратиться в туман

1 Ответ

0 голосов
/ 26 сентября 2018
#include <vector>

int main()
{
    std::vector<std::vector<char>> fog {
        { 'a', 'b', 'c' },
        { 'f', 'g', 'a' }
    };

    fog[0].reserve(fog[0].size() * 2); // make sure the vector won't have to grow
    fog[1].reserve(fog[1].size() * 2); // during the next loops *)

    for (auto &v : fog) {
        for (auto it = v.begin(); it != v.end(); it += 2)
            it = v.insert(it + 1, *it);
    }
}

*) потому что он сделает недействительными все итераторы, если вектор будет расти сверх своей емкости.

Используя возвращаемое значение insert(), это можно сделать без reserve():

for (auto &v : fog) {
    for (auto it = v.begin(); it != v.end(); ++it)
        it = v.insert(it + 1, *it);
}
...