gpt4 book ai didi

c++ - 字符串归并排序

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:07:24 26 4
gpt4 key购买 nike

我对C++编程很陌生,最近写了一个mergesort方法来对一些数组进行排序。对于我的个人测试,它适用于整数和 double 。但是当我尝试对字符串进行排序时,它给了我一个“语义问题”错误,我很困惑。完整代码为:

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

template<typename T>
class Sorting{
public:
static void merge(T* a, int left, int mid, int right){
int i=left; int j=mid+1; int k=0;
T t[right-left+1]; //****************ERROR LINE

for(;i<=mid && j<=right;k++){
if(*(a+i)<=*(a+j)){
t[k]=a[i];
i++;
}
else{
t[k]=a[j];
j++;
}
}

for(;i<=mid;i++,k++) t[k]=a[i];

for(;j<=right;j++,k++) t[k]=a[j];

for(i=0;i<k;i++) a[left+i]=t[i];
}

//Mergesort top-level function. Left is starting index, right is ending index
static void mergesort(T* a, int left, int right){
if(left>=right) return;
int mid=left+((right-left)>>1);
mergesort(a, left, mid);
mergesort(a, mid+1, right);
merge(a, left, mid, right);
}
};


int main(){
const int len=5;
string ss[len]={
"Yep",
"Nope",
"5",
"2.5",
"Stackoverflow"
};
double ar[len]={4.2, 3, 5.6, -15, 0};

Sorting<double>::mergesort(ar, 0, 4); for(int i=0; i<len;i++) cout<<ar[i]<<endl;
Sorting<string>::mergesort(ss, 0, 4); for(int i=0; i<len;i++) cout<<ss[i]<<endl;
return 0;
}

我在“//**ERROR LINE”处遇到语义错误,例如:

Variable length array of non-POD element type 'std::__1::basic_string<char>'

这个错误指的是什么?我应该如何修改我的代码?

最佳答案

在错误消息中,POD 指的是 plain old data type

你可以使用 std::vector其中,即

   std::vector<T> t;
t.resize (right-left+1);

你也可以制作t指针数组(即 T* t[right-left+1]; 并相应地更新代码)。

顺便说一句,您使用的是可变长度数组,它是一个 GCC extension一些其他编译器不提供。

但排序在 C++ 标准库中是可用的。你需要 #include<algorithm>并使用 std::sort在标准 C++ 容器上。

关于c++ - 字符串归并排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17017195/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com