【发布时间】:2011-12-16 10:15:31
【问题描述】:
我需要一个指向 std::string 中特定字符的迭代器,而不是从头开始循环。
这是最好的方法吗?
std::string s("abcdefg...");
size_t id = 5;
std::string::const_iterator it = s.begin();
std::advance(it, id - 1);
【问题讨论】:
我需要一个指向 std::string 中特定字符的迭代器,而不是从头开始循环。
这是最好的方法吗?
std::string s("abcdefg...");
size_t id = 5;
std::string::const_iterator it = s.begin();
std::advance(it, id - 1);
【问题讨论】:
你也可以这样做:
std::string::const_iterator it = s.begin() + (id-1);
虽然它应该具有或多或少与std::advance 相同的性能,因为如果it 是一个随机访问迭代器,advance 使用operator+(否则它会诉诸循环;这会发生例如@987654326 @迭代器)。
【讨论】:
string分配是否连续无关,与迭代器类型有关。 deque 没有连续分配,但它确实有随机访问迭代器,因此它的迭代器有 operator+。
&(s[0]) 获得)。
由于std::string的迭代器是随机访问的,所以可以直接这样做:
std::string::const_iterator it = s.begin() + (id-1);
(这是 std::advance 最终扩展为随机访问迭代器的内容。)
【讨论】: