微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sort() 即使包含 <algorithm> 也会出错

如何解决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";
        }
    }
}

解决方法

您的代码中有两个问题:

  1. 您对 sort 的用法是错误的,它是 std::sort(words.begin(),words.end())。这应该在你的书或你的学习材料中。

  2. 在第一次迭代过程中,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] 举报,一经查实,本站将立刻删除。