将迭代器移动到以下字符串元素需要花费不变的时间:
std::string str // string of size 100 MB
std::string::iterator iter = str.begin();
std::advance(iter, str.size()-1);
按索引搜索会花费不变时间吗?
char c = str[str.size()-1];
答案 0 :(得分:3)
是的,这是正确的。这是由C ++标准(§24.3,迭代器操作)保证的:
因为只能随机访问迭代器 提供+和 - 运算符,库 提供两个功能模板 提前和距离。这些功能 模板使用+和 - 随机 访问迭代器(因此, 他们不变的时间);
答案 1 :(得分:0)
为什么你会使用顶级代码而不是str.end() - 1?
编辑:或str.back(),这是更容易通用的。