我应该如何在 C++ 中动态分配字符串指针?
How should I dynamically allocate string pointers in C++?
大家好!
我正在尝试为 C++ 中的字符串指针动态分配 space,但我遇到了很多麻烦。
我写的部分代码是这样的(关于 RadixSort-MSD):
class Radix
{
private:
int R = 256;
static const int M = 15;
std::string aux[];
int charAt(std::string s, int d);
void sortR(std::string a[]);
public:
void sortR(std::string a[], int left, int right, int d);
};
这里是有问题的部分:
void Radix::sortR(std::string a[])
{
int N = sizeof(a)/sizeof(std::string*);
aux = new std::string[N]; //Here is the problem!
sortR(a, 0, N-1, 0);
}
下面是我尝试编译我的项目时出现的错误,它是关于变量“aux”的,它是一个字符串指针。
|15|error: incompatible types in assignment of 'std::__cxx11::string* {aka std::__cxx11::basic_string<char>*}' to 'std::__cxx11::string [0] {aka std::__cxx11::basic_string<char> [0]}'|
我是一个完全菜鸟的巴西 C++ 学生。所以我不明白错误信息在说什么。
你能帮帮我吗?
使用 std::vector
。改变这个
std::string aux[];
至此
std::vector<std::string> aux;
还有这个
void Radix::sortR(std::string a[])
{
int N = sizeof(a)/sizeof(std::string*);
aux = new std::string[N]; //Here is the problem!
sortR(a, 0, N-1, 0);
}
至此
void Radix::sortR(const std::vector<std::string>& a)
{
aux.resize(a.size()); //No problem!
sortR(a, 0, a.size()-1, 0);
}
您还必须更改 sortR
的其他版本以使用向量而不是指针。
您的代码无法运行,因为您无法将数组传递给 C++ 中的函数,因此此代码 sizeof(a)/sizeof(std::string*)
无法运行,因为在您的 sortR
函数中 a
是一个指针.
作为一般规则,您不应在 C++ 程序中使用数组、指针或 new
。当然也有很多例外,但您的首选应该是使用 std::vector
代替。
大家好! 我正在尝试为 C++ 中的字符串指针动态分配 space,但我遇到了很多麻烦。
我写的部分代码是这样的(关于 RadixSort-MSD):
class Radix
{
private:
int R = 256;
static const int M = 15;
std::string aux[];
int charAt(std::string s, int d);
void sortR(std::string a[]);
public:
void sortR(std::string a[], int left, int right, int d);
};
这里是有问题的部分:
void Radix::sortR(std::string a[])
{
int N = sizeof(a)/sizeof(std::string*);
aux = new std::string[N]; //Here is the problem!
sortR(a, 0, N-1, 0);
}
下面是我尝试编译我的项目时出现的错误,它是关于变量“aux”的,它是一个字符串指针。
|15|error: incompatible types in assignment of 'std::__cxx11::string* {aka std::__cxx11::basic_string<char>*}' to 'std::__cxx11::string [0] {aka std::__cxx11::basic_string<char> [0]}'|
我是一个完全菜鸟的巴西 C++ 学生。所以我不明白错误信息在说什么。
你能帮帮我吗?
使用 std::vector
。改变这个
std::string aux[];
至此
std::vector<std::string> aux;
还有这个
void Radix::sortR(std::string a[])
{
int N = sizeof(a)/sizeof(std::string*);
aux = new std::string[N]; //Here is the problem!
sortR(a, 0, N-1, 0);
}
至此
void Radix::sortR(const std::vector<std::string>& a)
{
aux.resize(a.size()); //No problem!
sortR(a, 0, a.size()-1, 0);
}
您还必须更改 sortR
的其他版本以使用向量而不是指针。
您的代码无法运行,因为您无法将数组传递给 C++ 中的函数,因此此代码 sizeof(a)/sizeof(std::string*)
无法运行,因为在您的 sortR
函数中 a
是一个指针.
作为一般规则,您不应在 C++ 程序中使用数组、指针或 new
。当然也有很多例外,但您的首选应该是使用 std::vector
代替。