c++ - 如何像 python 语法一样在 C++ 中使用 "cut" vector

标签 c++ c++11 vector iterable

<分区>

在 python 中,如果我有一些可迭代对象,我可以这样做吗:

v = v[n:k] // 
for i in v[3:]:
     "do something"

现在在 C++ 中我想要这样:

vector<int> v = {1,2,3,4,5,6,7,8}
v = v[3:5]; 

或者像这样:

for(auto n: v[2:end])
       "do something";

我试图找到这个问题的语法,但还没有找到任何东西。

最佳答案

在 C++20 之前,您始终可以:

for(auto i : std::vector(v.begin() + 2, v.begin() + 5))
{
    foo(i);
}

但是不推荐这样做,因为它通过复制所有需要的元素来创建一个新的 vector。最好只做一个基于 for 循环的迭代器:

for(auto it = v.begin() + 2; it != v.begin() + 5; ++it) 
{
    foo(*it);
}
// or
for(size_t index = 2; index != 5; ++index) 
{
    foo(v[index]);
}

随着 C++20 引入 span,您可以:

for(auto i : std::span(v.begin() + 2, v.begin() + 5))
{
    foo(i);
}

它使用与第一个相同的语法,不需要复制元素。


我也相信 std::vector(&v[2], &v[5])std::span(&v[2], &v[5]) 也有效,但我需要有人确认。

关于c++ - 如何像 python 语法一样在 C++ 中使用 "cut" vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68401922/

相关文章:

java - 通过 JAVA 访问 C++ 原生 DLL(带命名空间)

c++ - std::map 从多个线程写入/读取

c++ - vector 模板问题

c++ - 如何制作指向另一个子 vector 中项目的指针 vector ?

c++ - 为什么 OpenCL 工作组大小对 GPU 性能影响巨大?

c++ - Visual Studio 2010 C++ 中的自定义项模板

c++ - C++ 标准的哪一部分涵盖通过空指针调用方法?

c++ - 重新初始化随机分布

C++11 值初始化器与列表初始化器

javascript - Raphael JS 如何让内联 SVG 在 Firefox 3.6 中工作?