使用提升range_iterator数组拆分字符串
Using array of boost range_iterator to split a string
我想通过给定固定长度的块(例如 15 个字符)处理C++无限长的字符串。
字符串是负责处理它的类的一个属性(我们称类为"Person",属性称为"_description"),外部代码必须调用一个方法来按顺序处理每个块,例如 Person::p rocessDescription()。另一种方法允许查看是否还有一个块需要处理,例如 Person::isThereMoreDescriptionToBeProcessing()。
为了避免处理索引和可能的副作用(+1/-1 的错误,init..),有人建议我存储一个range_iterators数组(boost)并迭代它们进行处理,但我不知道range_iterator概念和 Boost 文档在这里没有太大帮助。
我想我会存储 2 个项目(例如 _currentItem 和 _endItem)作为 Person 的属性,并像
_currentItem == _endItem
在是那里有更多描述到被处理(),我想我会做类似的事情
_currentItem++
在 processDescription() 的末尾,但我不明白如何为此目的在 _description 属性的 init 处填充范围迭代器数组,以及如何在 processDescription() 中处理字符串。
感谢您对此投掷一些光芒。
给定两个要创建范围的迭代器,您只需构造一个boost::iterator_range
并将两个迭代器作为构造函数参数传递。
下面的代码将str
拆分为三个字符段,并将每个段推送到ranges
中。
std::vector<boost::iterator_range<std::string::iterator>> ranges;
std::string str = "abcdefghijk";
auto it = str.begin();
auto lastIt = it;
while (it != str.end())
{
lastIt = it;
if (std::distance(it, str.end()) < 3)
it = str.end();
else
std::advance(it, 3);
ranges.push_back(
boost::iterator_range<std::string::iterator>(lastIt, it)
);
}
for (auto segment = ranges.begin(); segment != ranges.end(); ++segment)
std::cout << std::string(segment->begin(), segment->end()) << std::endl;
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '