4

我正在为一个问题编写代码:编写一个方法来对字符串数组进行排序,以便所有字谜彼此相邻。如果我的容器是vector,那就很简单了,因为vector有迭代器,可以在STL排序函数中使用,代码如下: 但是如果容器是数组呢?数组没有迭代器,不能使用 sort() 直接对数组进行排序。我想知道有没有办法创建一个数组迭代器,以便我可以使用 sort() 直接对数组进行排序?谢谢 !

#include <iostream>
#include<string>
#include<algorithm>
#include<vector>
using namespace std;

bool compare(string s1, string s2){
  sort(s1.begin(), s1.end());  //sort return void, not the sorted result!!!!!!!!!!
  sort(s2.begin(), s2.end());
  return s1<=s2;
}


void sort_string(vector<string> &v){
    sort(v.begin(), v.end(), compare);
}
#
If I want to use array itertor:

bool compare(string s1, string s2){
        sort(s1.begin(), s1.end());
        sort(s2.begin(), s2.end());
        return s1<=s2;
}


int sortStrarr(string strarr[], int len){

    //sort(strarr's iterator.begin, strarr's iterator.end, compare); ???
}
4

6 回答 6

8

指针可以充当迭代器,因此您只需要指向数组开头和结尾的指针。

于 2013-03-27T21:34:14.193 回答
6

由于(就像在 C 中一样)数组可以转换为指向第一个元素的指针(但请不要将数组与指针混淆),您可以使用指针来确定开始和结束,因此您可以编写:

sort(strarr, strarr + len, compare);

或者,如果您使用 C++11(或 Boost),您可以使用array类:

template<std::size_t N>
int sortStrarr(std:array<string, N>& strarr, int len){
    sort(strarr.begin(), strarr.end(), compare);
}
于 2013-03-27T21:36:18.203 回答
3

您可以sort()用于数组。指针充当迭代器。

例子:

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main()
{
    string arr[5]={"BBB","AAA","CCC","FFF", "EEE"};
    sort(arr,arr+5);
    for(string i: arr)
    {
        cout << i << endl;
    }
}

输出是:

AAA
BBB
CCC
EEE
FFF
于 2013-03-27T21:36:09.643 回答
0
int sortStrarr(string strarr[], int len){
     sort(&strarr[0],&strarr[len],compare) ;
    //sort(strarr's iterator.begin, strarr's iterator.end, compare); ???
}
于 2013-03-27T21:37:12.397 回答
0

我们必须使用 sort 函数对字符串数组进行排序。

int main()
{
   string arr[5] = {"e", "b", "c", "d", "a'};
   sort(arr, arr+5);
   for(int i=0; i<5; i++)
   {
     cout<<arr.at(i)<<" ";
   }
   return 0;
}
于 2017-07-11T15:39:25.683 回答
0

自由函数std::begin()std::end()(自 C++11 起)专门用于数组类型,但编译器必须知道大小:

template <typename T, std::size_t N>
int sortStrarr(T array[N])
{
    // 'using' allows ADL to select best overload
    using std::begin;
    using std::end;
    std::sort(begin(array), end(array));
}

如果您只有开始和(运行时)大小,那么您可以使用指针作为迭代器:

template <typename T>
int sortStrarr(T array[], size_t len)
{
    std::sort(array, array+len);
}
于 2017-10-11T12:32:42.350 回答