【发布时间】:2015-08-13 15:47:51
【问题描述】:
我在 Xcode 上用 C++ 编写简单的冒泡排序算法时遇到问题。一个特殊的问题是获取数组的长度,我收到一条错误消息:“数组函数上的 sizeof 将返回 int* 的大小而不是 int[]”。这是什么意思?我尝试在数组 {33,60,55,8,26} 上测试算法,但对如何构造数组长度函数感到困惑。
#include <iostream>
#include <array>
using namespace std;
#define ARRAY_SIZE(array) (sizeof((array))/sizeof((array[0])))
void swap(int n1, int n2){
int temp = n1;
n1 = n2;
n2 = temp;
}
int count(int a[]){
int len=0;
for(int i = 0; i <= 20; i++){
if(a[i] >= 0){
len++; //len=len+1
}
}
return len;
}
template <size_t N>
void BubbleSort( int a[], size_t len ){
for(int i = 0;i <= len;i++){
if(a[i] > a[i+1]){
swap(a[i],a[i+1]);
}
}
}
void printr(int arr[]){
for(int i = 0; i <= len; i++){
cout<<arr[i]<<"\n";
}
}
int main(int argc, const char * argv[]) {
int arr[] = {33,60,55,8,26};
BubbleSort(arr, ARRAY_SIZE(arr));
printr(arr);
return 0;
}
【问题讨论】:
-
我知道有类似的问题......但基本上只是将数组大小传递给函数(或者更好的是,使用 C++ 容器类)。
-
或者,您可以使用
std::vector<int>(动态大小)或std::array<int, Size>(固定大小),它们都提供了size方法(容器类 crashmstr 至少谈到了两个 i能想到)。虽然传递一个经典数组并且它的大小非常好(但不要使用sizeof来确定它的大小并使用 Paul Roub 的答案)。