微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何像python语法一样在c ++中“剪切”向量

如何解决如何像python语法一样在c ++中“剪切”向量

在 python 中,如果我有一些可迭代的,我可以做这样的事情:

ReceiveMessage()

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

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

或者像这样:

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

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

解决方法

在 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]) 也是有效的,但我需要有人来确认。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。