我正在编写一个问题的代码:写一个方法来对字符串数组进行排序,以便所有的字谜彼此相邻。 如果我的容器是vector,它将非常简单,因为vector有迭代器,可以在STL sort函数中使用,它是下面的代码: 但是如果容器是一个数组怎么办? Array没有迭代器,也不能使用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); ???
}
答案 0 :(得分:6)
指针可以充当迭代器,所以你只需要指向开头的指针,直到数组末尾。
答案 1 :(得分:6)
as(比如在C中)数组可以被转换为指向第一个元素的指针(但是请不要将数组与指针混淆)你可以使用指针来确定开始和结束,所以你写:
sort(strarr, strarr + len, compare);
或者如果您使用C ++ 11(或Boost),您可以使用array
class:
template<std::size_t N>
int sortStrarr(std:array<string, N>& strarr, int len){
sort(strarr.begin(), strarr.end(), compare);
}
答案 2 :(得分: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
答案 3 :(得分:0)
int sortStrarr(string strarr[], int len){
sort(&strarr[0],&strarr[len],compare) ;
//sort(strarr's iterator.begin, strarr's iterator.end, compare); ???
}
答案 4 :(得分: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;
}
答案 5 :(得分: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));
}
如果只有start和(运行时)大小,那么可以使用指针作为迭代器:
template <typename T>
int sortStrarr(T array[], size_t len)
{
std::sort(array, array+len);
}