如何解决sort() 即使包含 <algorithm> 也会出错
@H_404_0@我也从《编程原则与实践》中复制了确切的代码,但无济于事。 当我尝试使用std::sort(word)
或 sort(word)
时收到错误消息:
<source>: In function 'int main()':
<source>:13:14: error: no matching function for call to 'sort(std::vector<std::__cxx11::basic_string<char> >&)'
13 | std::sort(words);
| ~~~~~~~~~^~~~~~~
[...]
@H_404_0@代码:
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
std::vector<std::string> words;
for(std::string temp; std::cin >> temp;){
words.push_back(temp);
}
std::cout << "Number of words: " << words.size() << "\n";
std::sort(words);
for(int i=0; i < words.size(); i++){
if(i == 0; words[i-1]!=words[i]){
std::cout << words[i] << "\n";
}
}
}
解决方法
您的代码中有两个问题:
-
您对
sort
的用法是错误的,它是std::sort(words.begin(),words.end())
。这应该在你的书或你的学习材料中。 -
在第一次迭代过程中,
if (i == 0; words[i-1]!=words[i])
中的i
为 0,因此您访问的words[-1]
超出了边界,最多只会触发一些错误消息。;
在这里也没有任何意义。
你可能想要这个:
for (size_t i = 0; i < words.size() - 1; i++) {
if (words[i] != words[i + 1]) {
std::cout << words[i] << "\n";
}
}
,
sort 函数接受 2 或 3 个变量。前 2 个用于开始和结束索引。在这种情况下,它们是 words.begin() 和 words.end()
所以,你的第 13 行(有错误)应该是:
std::sort(words.begin(),words.end());
可以给出第三个参数来指定排序的类型。例如,
std::sort(words.begin(),words.end(),greater<int>());
将以相反的顺序对向量进行排序。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。