【发布时间】:2020-04-17 05:59:42
【问题描述】:
考虑:
#include <string>
#include <string_view>
using namespace std;
string sv2s_1(string_view sv)
{
return string(sv.data(), sv.size());
}
string sv2s_2(string_view sv)
{
return string(sv.begin(), sv.end());
}
在sv2s_1中,string最多需要分配一次内部缓冲区。
在sv2s_2中,string不知道内部缓冲区应该有多大,所以必须将字符一个一个推回,并可能多次重新分配和复制内部缓冲区。
假设first和last是随机访问迭代器,string(first, last)可以使用last - first快速获取其内部缓冲区的大小,所以性能等于string(ptr, size)。
问题:如果first 和 last 是随机访问迭代器,
C++ 标准是否保证 string(first, last) 等效于 string(ptr, size) 在性能方面?
【问题讨论】:
-
我的意思是有
std::distance所以你不需要随机访问迭代器。另一方面,如果你有一个指针和一个大小,为什么不应该有一个随机访问迭代器呢?
标签: c++ string performance time-complexity standards