c++ - 对 std::wstring 的 vector 进行排序实际上会重写原始字符串数据吗?

标签 c++ string sorting c++11 vector

让我们对包含 100 万个字符串的 vector 进行排序:

std::vector<std::wstring> v;           
// fill the vector
std::sort(v.begin(), v.end());

是否:

  1. 用新的wstring重写 vector ,包含wstring结构本身的几个字节+指向未修改的实际原始数据的指针,不重写/移动实际字符原始数据

  1. 用新的wstring重写 vector 并且实际的字符原始数据也被重写/移动?

如果字符串平均长度为 100 个字符,我可以想象 2. 会比 1 慢得多。

在 C++03 中,这两种情况中哪一种是正确的?在 C++11 上?

最佳答案

虽然我不确定它是否保证会执行第一个选项,但我很确定它会移动大小不变的 std::wstring 结构(它们不依赖于大小字符串)。

代表字符串的字节不在它的结构中,只有一个指向它们分配的内存区域的指针。

关于c++ - 对 std::wstring 的 vector 进行排序实际上会重写原始字符串数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45456330/

相关文章:

C++ boost log位置(索引)格式对齐

string - 如何在 PostScript 中获取字符串的高度度量?

arrays - 数组的有序笛卡尔积

c++ - 如何正确检查 istreambuf_iterator 是否已到达流末尾

c++ - 故意不使用参数时,如何避免未使用参数的警告?

java - 如何使用 Android Studio 删除 JsonArray 中的反斜杠 ("\"")?

java - 如何在java或android中以相反的顺序对对象数组列表进行排序?

arrays - PostgreSQL:使用某种排序条件对元素数组进行排序

c++ - 从 CImage AtlImage 获取缓冲区数组

python - 为什么我无法将条目小部件中的字符串转换为 float ?