为什么sort()函数对后续字符数组的行为有所不同?

时间:2016-06-27 14:38:08

标签: c++ c++11

char a[] = {'t' , 'e' , 's' , 't' , 'i' , 'n' , 'g'};
sort(a,a+7);

这绝对没问题。

char*a = "testing";
sort(a, a+7);

无法运行。为什么没有排序?

string a = "testing";
sort(a.begin(),a.end());

这很好..

string a ="testing";
sort(a , a+7);

但这失败了。这里'a'是一个C ++字符串,但为什么有必要在这里使用迭代器?

1 个答案:

答案 0 :(得分:3)

char*a = "testing";
sort(a, a+7);

这会失败,因为c-string文字存储在无法编辑的内存中。它调用未定义的行为,并且在大多数环境中,操作将失败。

string a ="testing";
sort(a , a+7);

这是一个不正常的计划。 std::string是一个正确的C ++对象,因此a不是像char*char[]那样的指针。 std::sort被重载到指针或迭代器,如果你提供的东西都没有,它将无法工作。该代码甚至不应该编译,所以如果确实如此,则需要更新编译器。