【发布时间】:2021-01-27 20:45:54
【问题描述】:
我知道迭代字符串的每个字符的简单方法,例如:
std::string some_string("Hello World");
for(auto character : some_string)
std::cout << character << std::endl;
但是有没有办法使用这种结构来告诉它采取措施,或者以这种方式采取特定长度的容器?或者我是否必须使用经典的int i = 0; i < some_string.length(); i+=2 构造来迭代字符串索引并使用string.substr() 存储部分索引?例如,如果我想将字符串的每 2 个字符存储为子字符串。
【问题讨论】:
-
不,这是不可能的。你需要一个使用迭代器的 for 循环,或者一个索引循环。
-
简单易读的代码 > 一些看起来很酷的 hacky 技巧。
-
@JackAvante -- boost 库有stride iterators。也许在 C++ 23 或更高版本中,它们可以被标准委员会采用。
-
views::stride(n)from ranges-v3 可以做到这一点 (for (auto character : some_string | views::stride(2)))。还有boost::adaptors::strided(n),语法类似 -
@Artyer 你应该发布
views::stride()作为两者的答案,我想说,因为range-v3是标准范围的基础,因此stdlib 将得到一个很好的改变stride()未来。