让我们对包含 100 万个字符串的 vector
进行排序:
std::vector<std::wstring> v;
// fill the vector
std::sort(v.begin(), v.end());
是否:
- 用新的
wstring
重写 vector ,包含wstring
结构本身的几个字节+指向未修改的实际原始数据的指针,不重写/移动实际字符原始数据
或
- 用新的
wstring
重写 vector 并且实际的字符原始数据也被重写/移动?
如果字符串平均长度为 100 个字符,我可以想象 2. 会比 1 慢得多。
在 C++03 中,这两种情况中哪一种是正确的?在 C++11 上?
最佳答案
虽然我不确定它是否保证会执行第一个选项,但我很确定它会移动大小不变的 std::wstring
结构(它们不依赖于大小字符串)。
代表字符串的字节不在它的结构中,只有一个指向它们分配的内存区域的指针。
关于c++ - 对 std::wstring 的 vector 进行排序实际上会重写原始字符串数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45456330/