【发布时间】:2021-12-12 10:54:21
【问题描述】:
在下面的这个程序中,我试图将 2 个数组合并为一个向量,但是在返回函数时,我得到了额外的垃圾值。
请任何人建议我如何删除这些!
#include <bits/stdc++.h>
#include <vector>
#include <string>
using namespace std;
vector <int> merge(int a[],int b[]){
vector <int> marr1;
marr1.clear();
int i=0,j=0;
while(i+j <= ((*(&a+1)-a)+(*(&b+1)-b)))
{
if ((i<= *(&a+1)-a)){
marr1.push_back(a[i]);
i++;
}
else{
marr1.push_back(b[j]);
j++;
}
}
sort(marr1.begin(),marr1.end());
return marr1;
}
int main(){
//array imlementation
int arr1[] = {5,7,4,5},arr2[] = {8,3,7,1,9};
vector <int> ans;
ans.clear();
ans = merge(arr1,arr2);
for (auto i=ans.begin();i<ans.end();++i){
cout<<*i<<"\t";
}
}
产生的输出:
0 0 0 0 1 3 4 5 5 7 7 8 9 32614 32766 4207952 1400400592
【问题讨论】:
-
同时包含您获得的输出和预期输出会很有帮助。
-
你怎么知道a[]和b[]有多少个元素?
i+j <= ((*(&a+1)-a)+(*(&b+1)-b)))在我看来不合适。在普通 c 中,您必须在数组降级为指针时传递大小,或者通过保持大小的向量传递值。 -
@TarunvigneshSelvabalaji 但请对问题进行任何澄清。你可以edit这个问题。
-
试试
std::cout<<"(*(&a+1)-a): "<<(*(&a+1)-a)<<std::endl; std::cout<<"(*(&b+1)-b)): "<<(*(&b+1)-b))<<std::endl;看看它打印了什么。是垃圾。表达式是错误的。