相关疑难解决方法(0)

为什么我不能从迭代器构造一个 std::span ?

考虑一个大内存容器。在这个简单的例子中std::vector<int>

std::vector v = { 0, 1, 2, 3, 4, 5 };
Run Code Online (Sandbox Code Playgroud)

std::span允许我创建一个轻量级的内存视图。现在我想简单地打印跨度:

template<typename T>
void print(std::span<T> span) {
    std::cout << '[';
    if (span.size())
        std::copy(span.begin(), span.end() - 1, std::ostream_iterator<int>(std::cout, ", "));

    std::cout << span.back() << "]\n";
}

int main() {
    std::vector v = { 0, 1, 2, 3, 4, 5 };

    print(std::span{ v });
}

Run Code Online (Sandbox Code Playgroud)

输出:

[0, 1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

现在我想制作子集(这是std::span实际作为视图变得有用的地方)。我可以用迭代器来指定我的范围,并调用此构造函数(3)std::span

template< class It, class End >
explicit(extent != std::dynamic_extent) …
Run Code Online (Sandbox Code Playgroud)

c++ iterator c++20 std-span

6
推荐指数
1
解决办法
523
查看次数

标签 统计

c++ ×1

c++20 ×1

iterator ×1

std-span ×1