我有点难过。我正在构建一个由数组建模的二进制堆类。我正在尝试获取两个字符串数组,并将它们连接在一起(用于合并函数)以创建一个新数组,然后我将对其执行排序操作。
在我的界面中,两个数组都是这样初始化的:
string *heapArray;
在我的实现中,两个数组都是这样构造的:
heapArray = new string[10];
我试过的代码,不能编译,是这样的:
merged->heapArray = one->heapArray + two->heapArray;
显然我在这里做错了,但我过去没有对原始C ++数组进行任何连接,主要是用向量来安全。唉,处理这个优化任务需要它。任何指导都将不胜感激。
我意识到我没有发布太多代码,但是我对在这里发布大量代码块的人感到沮丧。我发布了我认为相关的内容,但是如果有一些具体的内容我会遗漏哪些会有所帮助,请告诉我,我会添加它。
答案 0 :(得分:2)
在处理直接C ++数组时,将它们中的两个一起添加的唯一方法是分配一个新数组,并将它们从两个源数组逐个插入到新数组中
编辑: 或者是memcpy,但对于非基本数据类型来说这并不容易
答案 1 :(得分:1)
你做不到;你将两个内存地址(指针)一起添加到一个无意义的指针。我建议您将heapArray
替换为vector
字符串
heapArray = vector<string>(10);
然后连接两个向量。
merged.heapArray = one.heapArray;
one.heapArray.insert(one.heapArray.end(),two.heapArray.begin(),two.heapArray.end() );
此外,数据位于堆上,因此您的“heapArray”标识符仍然有效。如果您不想使用vector
(出于某些学术原因),您可以通过在one
中分配足够的空间并复制每个元素来合并two
和merged->heapArray
你的阵列。
答案 2 :(得分:0)
merged->heapArray = one->heapArray + two->heapArray;
你试图在这里添加两个指针,而不是连接字符串。你不能只是连接这样的数组,你需要分配一个新的内存区域并将它们复制(使用复杂类型的memcpy
并不总是安全的。你总是可以为两者分配一个数组并将它们复制到)。
另外,为什么要在堆中使用string
(假设std::string
)数组?那太奇怪了。
答案 3 :(得分:0)
我认为你要找的是这样的:
string heapArray;
heapArray = new string[10]; // create an array of strings
...
string mergedString = heapArray[0] + heapArray[1];
答案 4 :(得分:0)
编译错误是由于您要添加两个不相关的指针 如果要合并两个字符串,则可以添加它们 现在你应该做的是
vector<string> v1,v2,v3;
.
.
.
for(int i = 0; i < v1.size(); i++){
v3.push_back(v1[i] + v[i]);
}
v3将给出带有连接字符串的向量