【发布时间】:2015-11-03 09:13:42
【问题描述】:
我有一个std::vector<std::string> v;(已初始化)。如何使用 range-for 循环访问除第一个元素(索引为零)以外的所有元素。对于所有元素:
for (const string & s: v)
process(s);
可以使用范围表达式来代替v。 如何编写范围表达式以跳过第一个元素(或跳过前n个元素)?
我知道如何使用v.begin() + 1 和使用经典循环来获得效果。我正在寻找新的、更易读的、推荐的替代方法。可能类似于 Python 切片? ...喜欢:
for s in v[1:]:
process(s)
【问题讨论】:
-
一种方法是使用所需元素制作一个新向量,然后循环遍历。或者你可以使用
std::for_each:en.cppreference.com/w/cpp/algorithm/for_each -
你不能。基于范围的循环并不是每个问题的解决方案。只需使用普通循环即可。
-
正如@GargAnkit 所述,您可以使用所需元素制作一个新向量。您可以使用向量构造函数将其作为循环声明的一部分。所以
for (auto&& i : std::vector<std::string>(v.begin()+1,v.end()))。演示here。虽然不如你展示的python示例那么整洁。 -
见stackoverflow.com/questions/25652505/…,它有很好的模板来解决一般问题。