2011-12-16 75 views
2

我需要一个迭代器到std::string中的特定字符,而不需要从头开始循环。迭代器到std :: string中的特定字符

这是最好的方法吗?

std::string s("abcdefg..."); 
size_t id = 5; 
std::string::const_iterator it = s.begin(); 
std::advance(it, id - 1); 

回答

3

你也可以简单地做:

std::string::const_iterator it = s.begin() + (id-1); 

虽然它应该有更多或更少的std::advance相同的性能,因为如果it是随机访问迭代器,advance使用operator+(否则将求助于循环;这发生在例如list迭代器中)。

+0

我忘了的std :: string分配是连续的... Grazie! – 2011-12-16 10:23:11

4

由于std::string的迭代器是随机访问,你可以直接做到这一点:

std::string::const_iterator it = s.begin() + (id-1); 

(这是std::advance最终扩展为随机访问迭代器)。