我想将值从一个 vector 复制到另一个将以特定顺序存储的 vector ,第二个 vector 将包含比第一个 vector 更多的元素。

例如:

vector<int> temp;
temp.push_back(2);
temp.push_back(0);
temp.push_back(1);
int size1 = temp.size();

int size2 = 4;
vector<int> temp2(size1 * size2);

现在我想像这样填充temp2:{2,2,2,2,2,0,0,0,0,1,1,1,1}。

是否可以仅使用算法(例如填充)来执行此操作?

最佳答案

是的,可以使用 std::generate_n 算法:

int main() {
    std::vector<int> base{1, 0, 2};
    const int factor = 4;
    std::vector<int> out{};

    std::generate_n(std::back_inserter(out), base.size() * factor,
            [&base, counter=0]() mutable {
        return base[counter++ / factor];
    });

    for(const auto i : out) {
        std::cout << i << ' ';
    }
}

此代码打印:1 1 1 1 0 0 0 0 2 2 2 2
关键是std::generate_n中使用的lambda。它在内部计数器上进行操作,以基于base vector (并根据factorcounter值进行访问)知道要生成哪些值。

关于c++ - 以重复的方式将元素添加到std::vector,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54055587/

10-11 00:32
查看更多