【问题标题】:Sorting numbers using vector in c++ [closed]在c ++中使用向量对数字进行排序[关闭]
【发布时间】:2015-07-27 03:37:28
【问题描述】:

我正在尝试使用向量从最小到最大对某些数字进行排序。当我尝试运行我的代码时,它只显示 ----PRINT----- 和 ---END--- 我卡住了。我在想它是否与排序过程中的修复功能有关。

#include <vector>
#include <iostream>
#include <algorithm>

using namespace std;

void print(vector<int> vec)
 {
    cout<< "------PRINT---------"<< endl;
    for (vector<int>::const_iterator it=vec.begin(); it!=vec.end(); ++it) 
    cout << *it << " ";

    cout << "------ END ------" << endl;
 }
  vector<int> fix(vector<string> numbers)
 {
           vector<int> result;  
           sort( result.begin(), result.end() );
           return result;
  }

 int main() 
{

vector<string> test;

test.push_back("5462");
test.push_back("5451");
test.push_back("7854");
test.push_back("221");


print(fix(test));

return 0;
}

【问题讨论】:

    标签: c++ algorithm sorting vector


    【解决方案1】:

    vector&lt;int&gt; result; 更改为vector&lt;int&gt; result = numbers;

    将所有vector&lt;string&gt; 替换为vector&lt;int&gt; 并在您push_back 时删除数字周围的引号

    【讨论】:

    • 它给了我错误。 21:23:错误:从 'std::vector<:basic_string>>' 转换为非标量类型 'std::vector' 请求
    • 它工作正常。谢谢!
    【解决方案2】:

    在您的 fix 函数中,您正在对 result 进行排序,这是一个空向量。这会导致您遇到需要转换的基本类型不匹配的另一个问题。

    如果您希望结果为vector&lt;int&gt;,则必须先将字符串转换为整数。试试这个:

    vector<int> fix( vector<string> numbers )
    {
        vector<int> result;
        result.reserve( numbers.size() );
        std::transform( numbers.begin(), numbers.end(), std::back_inserter(result),
            []( const string & s ) { return strtol( s.c_str(), NULL, 10 ); } );
        sort( result.begin(), result.end() );
        return result;
    }
    

    如果您不理解上述代码,请在此处阅读更多内容:

    请注意,此解决方案使用 C++11 中添加的功能。

    【讨论】:

      【解决方案3】:

      问题,到处都是问题

      问题 1.

       vector<int> fix(vector<string> numbers)
       {
                 vector<int> result;  <--- what is this?
                 sort( result.begin(), result.end() );  <-- sort what? 
                 return result;
        }

      问题 2。

       vector<int> fix(vector<string> numbers)
      
       {
             // You wanna make vector<string> become vector<int> directly? nope
             // You have to convert yourself
             // or use something like result.push_back(atoi(numbers[i].c_str()))
                 vector<int> result;  
                 sort( result.begin(), result.end() );
                 return result;
        }

      问题 3。

      void print(vector<int> vec)
       {
          cout<< "------PRINT---------"<< endl;
         // I seldom see people use iterator on vector<>... but it's ok
          for (vector<int>::const_iterator it=vec.begin(); it!=vec.end(); ++it) 
          cout << *it << " ";
          
         // Missing cout << endl; alert
          cout << "------ END ------" << endl;
       }

      总结,工作版本:

      #include <vector>
      #include <iostream>
      #include <algorithm>
      
      using namespace std;
      
      void print(vector<int> vec)
       {
          cout<< "------PRINT---------"<< endl;
          for (vector<int>::const_iterator it=vec.begin(); it!=vec.end(); ++it) 
          cout << *it << " ";
      	
          cout << endl << "------ END ------" << endl;
       }
        vector<int> fix(vector<string> numbers)
       {
                 vector<int> result; 
                 for(int i=0, l =numbers.size(); i<l; i++) result.push_back(atoi(numbers[i].c_str()));
                 sort( result.begin(), result.end() );
                 return result;
        }
      
       int main() 
      {
      
      vector<string> test;
      
      test.push_back("5462");
      test.push_back("5451");
      test.push_back("7854");
      test.push_back("221");
      
      
      print(fix(test));
      
      return 0;
      }

      【讨论】:

        猜你喜欢
        • 2018-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-04
        • 2011-10-15
        • 1970-01-01
        相关资源
        最近更新 更多