使用c ++中的向量对数字进行排序

时间:2015-07-27 03:37:29

标签: c++ algorithm sorting vector

我试图使用vector将某些数字从最小到最大排序。当我尝试运行我的代码时,它只显示---- 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;
}

3 个答案:

答案 0 :(得分:1)

vector<int> result;更改为vector<int> result = numbers;

将所有vector<string>替换为vector<int>,并在push_back

时删除数字周围的引号

答案 1 :(得分:0)

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

如果希望结果为vector<int>,则必须先将字符串转换为整数。试试这个:

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中添加的功能。

答案 2 :(得分:-1)

问题,到处都是问题

问题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;
}