c++ - 我可以使用 std::generate 来获取 std::array<T, 2> 的 vector 吗?

标签 c++ c++11 vector stl

使用方便std::generate获取 T 的序列。此处的简单示例代码:

std::vector<int> v(5);
std::generate(v.begin(), v.end(), [n = 0] () mutable { return n++; });

我可以使用 std::generate 吗?得到std::vector<std::array<T,2>>

我的模板函数代码在这里:

#include <algorithm>
#include <array>
#include <vector>
template<typename T>
std::vector<std::array<T, 2>> m(int rows, int cols) {
    std::vector<std::array<T, 2>> vec(rows*cols);
    // this is the x value I want to generate
    std::vector<T> x(rows*cols);
    std::generate(x.begin(), x.end(), 
                  [n = -1, COLS = cols]() mutable { ++n; return n % COLS;});
    // This is the y value I want to generate
    std::vector<T> y(rows*cols);
    std::generate(y.begin(), y.end(), 
         [n = -1, ROWS = rows]() mutable { ++n;  return floor(n / ROWS); });
    // Is it possible to combine the above steps into one step? 
    std::generate(vec.begin(), vec.end(), 
    [n = -1, COLS = cols, ROWS = rows]() mutable { ++n;  return .... });
    return vec;
}

我想将两个步骤合并为一个步骤,这样做有什么方便的方法吗?

最佳答案

你的 lambda 应该是

[n = -1, COLS = cols, ROWS = rows]() mutable {
    ++n;
    return std::array<T, 2>{n % COLS, n / ROWS};
}

关于c++ - 我可以使用 std::generate 来获取 std::array<T, 2> 的 vector 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48523432/

相关文章:

android - 我可以在 iOS 中使用 C++ 模板吗?

c++ - 有没有办法在不使用 std::move 的情况下用构造类初始化类?

c++在多个源文件中包含具有相同类实现的不同头文件

c++ - 使用重复模式初始化 std::vector

c++ - 对象 move 后,指向const vector 成员变量元素的指针是否保持稳定?

c++ - 可以使用 Clang AST 打印带有名称的函数指针的 QualType 吗?

c++ - 如何在有和没有 std::vector 的情况下正确使用 jpeg_mem_dest

c++ - C++11 中类数据成员的默认初始化

c++ - Boost 和 std 的 result_of 问题,有些在 gcc 中编译,而在 msvc 中失败,反之亦然

Android 矢量 Assets : Do dp measurements only matter for "wrap content"?