这是我返回数组指针的函数。
#include<bits/stdc++.h>
using namespace std;
int *mergeArray(int a[], int b[], int as, int bs){
int* temp=new int[as+bs];
int i{0}, j{0}, k{0};
while(i<as&&j<bs){
if(a[i]<b[j]) temp[k++]=a[i++];
else temp[k++]=b[j++];
}
while(i<as) temp[k++]=a[i++];
while(j<bs) temp[k++]=b[j++];
return temp;
}
这是我的主要功能。我通过调用mergeArray函数来合并排序数组。我想找出归并后主数组的长度。当我试图找到数组大小,但我得到8作为输出,但值应该是14。当我使用sizeof时,我得到int数据类型的大小除以合并数组的第一个数据即((size of int data type)/arr[0]);
int main(){
int arr1[]={3, 6, 8, 10, 15};
int arr2[]={1, 5, 12};
int arr3[]={4, 8, 15, 16};
int arr4[]={2, 6};
int s1=sizeof(arr1)/sizeof(arr1[0]);
int s2=sizeof(arr2)/sizeof(arr2[0]);
int s3=sizeof(arr3)/sizeof(arr3[0]);
int s4=sizeof(arr4)/sizeof(arr4[0]);
int range[min(s1,min(s2, min(s3, s4)))*4];
int *arr= mergeArray(arr1, (mergeArray(arr2, (mergeArray(arr3, arr4, s3, s4)), s2, s3+s4)), s1, s2+s3+s4);
cout<<sizeof(arr)/sizeof(arr[0])<<" ";
}
如果使用裸指针,那么你必须显式地传递它们指向的对象的大小。
然而,因为你使用c++,你的问题的实际答案是使用std::vector
而不是裸指针数组。使用std::vector
,您的原始代码变成
#include <vector>
#include <iostream>
template<class T>
std::vector<T> mergeArray(
std::vector<T> const a,
std::vector<T> const b )
{
std::vector<T> r(a.size() + b.size());
auto a_it = a.begin();
auto b_it = b.begin();
auto r_it = r.begin();
while( a_it != a.end()
&& b_it != b.end()
&& r_it != r.end()
){
*r_it++ = *a_it < *b_it ? *a_it++ : *b_it++;
}
while( a_it != a.end()
&& r_it != r.end()
){ *r_it++ = *a_it++; }
while( b_it != b.end()
&& r_it != r.end()
){ *r_it++ = *b_it++; }
return r;
}
int main(){
std::vector<int> arr1={3, 6, 8, 10, 15};
std::vector<int> arr2={1, 5, 12};
std::vector<int> arr3={4, 8, 15, 16};
std::vector<int> arr4={2, 6};
auto arr = mergeArray(
arr1,
mergeArray(
arr2,
mergeArray(arr3, arr4)
)
);
std::cout << arr.size() << std::endl;
return 0;
}