我使用ICU break迭代器来使用cropper。在the example中,他们建议使用以下代码迭代所有边界:
void listWordBoundaries(const UnicodeString& s) {
UErrorCode status = U_ZERO_ERROR;
BreakIterator* bi = BreakIterator::createWordInstance(Locale::getUS(), status);
bi->setText(s);
int32_t p = bi->first();
while (p != BreakIterator::DONE) {
printf("Boundary at position %d\n", p);
p = bi->next();
}
delete bi;
}
这似乎表明next()
实际上改变了迭代器。但是,documentation似乎表明它的唯一作用是返回一个值。这只是坏文档的一个例子吗?特别是,如果next()
确实在变异,我想知道last()
是否也在变异。
答案 0 :(得分:0)
请注意,current()
是常量,而next()
和last()
则不是。是的,next()
推进迭代器,last()
将其设置到结束位置。我已经提交了http://bugs.icu-project.org/trac/ticket/9360来修复文档,谢谢。