c++排序算法的难点在于数组的长度
c++ sorting algorithm difficulty with array length
我在Xcode上用C++编写一个简单的Bubblesort算法时遇到了问题。一个特殊的问题是获取数组的长度,我收到一个错误,说"数组函数上的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;
}
此时:
void BubbleSort( int a[] ){
CCD_ 1的大小是未知的。无论出于何种目的,它都是int *
。您需要计算数组的已知长度,并将其传入,例如
void BubbleSort( int a[], size_t len ){
称为:
int arr[] = {33,60,55,8,26};
BubbleSort(arr, ARRAY_SIZE(arr));
#define ARRAY_SIZE(array) (sizeof((array))/sizeof((array[0])))
当应用于int[]
时,sizeof(array[0])
变成sizeof(int)
,但sizeof(array)
变成sizeof(int*)
(与sizeof(int[])
相同(。数组长度不存在:需要单独存储。
您应该使用标准库中的std::vector<>
容器和a[]
0函数。
顺便说一下,BubbleSort
函数,即使它有一个有效值len
(比如说,作为另一个函数参数(,也是错误的。尝试对{4,3,2,1}
进行排序:您需要两个嵌套循环。
此函数以及示例中的类似函数:
void BubbleSort(int a[])
完全等同于将它们定义为:
void BubbleSort(int* a)
你只是在拿一个指针。不能仅通过指针来确定数组的大小——那里的信息不足。C的方法是在任何地方额外传递大小:
void BubbleSort(int* a, size_t len)
但在C++中,我们可以通过推导数组大小来做得更好:
template <size_t N>
void BubbleSort(int (&a)[N]) // N is the length of the array
尽管最好使用std::vector
,这将使几乎所有事情都更容易处理:
void BubbleSort(const std::vector<int>& a) // a.size() is the length
相关文章:
- 为什么我的排序算法会更改数组值
- 使用指针算法修改函数中的 2D 数组
- 这种用于查找连续子数组中最大和的递归算法有什么优势吗?
- 通过指针算法计算数组长度
- 计算数组重复次数的组合的有效算法,加起来达到给定的总和
- 为什么在此排序算法实现中,向量明显比数组慢?
- C++线性搜索算法,确定数组中元素的数量
- 在矢量数组C++中使用算法库操作
- 数组 X[n] 仅存储名称.编写算法以在数组中插入或删除 ITEM
- 使用简单的暴力算法找到数组中最大的4个元素
- 计算数组中存在其总和的对数的算法
- 我是 c++ 的新手,有没有一种算法可以找到 3d 数组中最接近的 0 的距离?
- 使用指针算法调用结构内的结构数组
- 使用动态数组对算法编译器错误进行排序
- 如何在没有 c++ 中的数组/算法的情况下对两个条件的字符串进行排序
- 分而治之数组算法++
- c++ 插入数组算法故障
- 使用后缀数组算法进行Burrows-Wheeler变换
- 数组算法的组合
- 后缀数组算法