c++ - 以重复方式向 std::vector 添加元素

标签 c++ vector stl

我想将一个 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, 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/

相关文章:

c++ - 如何从 c :/folder in c/c++ 中删除其他文件夹中的 tmpnam 生成的文件

c++ - 如何在源代码中查找内存泄漏

c++ - 无效使用不完整类型 'class …' STL vector

c++ - 错误 C2146 : syntax error : missing ',' before identifier mType when passing a map by function

c++ - 我可以在 VS 中使用 GCC/LLVM 的 STL header 吗?

c++ - 公共(public)头文件中的外部类以及该类的头文件中的外部类

c++ - C++中的接口(interface)继承

c++ - 将 map 内容传输到自定义数据结构的单个 vector

c++ - 为什么 std::hash<T> 不专用于 char*?

c++ - std::function 而不是谓词模板