C++ C+中的气泡排序函数+;
不允许引用的数组。我知道C++是非法的。 但是,还有别的办法吗? 我肯定有,但我想不出来C++ C+中的气泡排序函数+;,c++,bubble-sort,C++,Bubble Sort,不允许引用的数组。我知道C++是非法的。 但是,还有别的办法吗? 我肯定有,但我想不出来 #include <iostream> using namespace std; #define UBound(n) sizeof(n) / sizeof(n[0]); void SortArray(int & Arr[]) { int ArrayLength; ArrayLength = UBound(Arr); int Min, Temp; f
#include <iostream>
using namespace std;
#define UBound(n) sizeof(n) / sizeof(n[0]);
void SortArray(int & Arr[]) {
int ArrayLength;
ArrayLength = UBound(Arr);
int Min, Temp;
for (int i = 0; i = ArrayLength; i++) {
for (int j = 0; j = ArrayLength; j++) {
if (Arr[i+1] < Arr[i]){
Temp = Arr[i+1];
Arr[i+1] = Arr[i];
Arr[i] = Temp;
}
}
}
}
void main() {
int numArray[9] = { 9, 7, 6, 8, 4, 5, 3, 2, 1 };
SortArray(numArray);
}
#包括
使用名称空间std;
#定义UBound(n)sizeof(n)/sizeof(n[0]);
无效排序(int&Arr[]){
内部排列长度;
排列长度=UBound(Arr);
最低温度;
for(int i=0;i=ArrayLength;i++){
对于(int j=0;j=ArrayLength;j++){
if(Arr[i+1]
最终功能:
template < size_t I >
void SortArray(int(&Arr)[I]) {
int Min, Temp;
for (int i = 0; i < I - 1; i++) {
for (int j = 0; j < I - 1; j++) {
if (Arr[j+1] < Arr[j]){
Temp = Arr[j+1];
Arr[j+1] = Arr[j];
Arr[j] = Temp;
}
}
}
}
模板
无效排序(整数(&Arr)[I]){
最低温度;
对于(int i=0;i
谢谢大家的回答。您可以使用函数模板(以及对数组的引用,而不是引用数组(请注意参数)):
模板
无效排序(整数(&Arr)[排列长度]){
...
}
您可以使用函数模板(以及对数组的引用,而不是引用数组(请注意参数)):
模板
无效排序(整数(&Arr)[排列长度]){
...
}
您的代码存在多个问题。让我把它们列出来
使用名称空间std代码>--永远不要这样做
——首先,您永远不需要这个宏。其次,这个定义是错误的#定义UBound
- SortArray正在尝试接收引用数组。它应该是
——接收对数组的引用;或模板void SortArray(int(&Arr)[N])
void SortArray(内部阵列[],大小长度)
使用名称空间std代码>--永远不要这样做
——首先,您永远不需要这个宏。其次,这个定义是错误的#定义UBound
- SortArray正在尝试接收引用数组。它应该是
——接收对数组的引用;或模板void SortArray(int(&Arr)[N])
void SortArray(内部阵列[],大小长度)
template < size_t I >
void SortArray(int (&Arr)[I]) {}
模板
void SortArray(int(&Arr)[I]){
现在,您可以使用I
,并且sizeof Arr
将像在函数的局部变量堆栈上一样进行报告
您可能不想这样做的原因是,每个大小的数组都将创建函数的新副本。可能会导致严重的肿胀
但是我使用了这种技术来创建一个constexpr字符串类型。有,但不一定是您应该使用的类型:
template < size_t I >
void SortArray(int (&Arr)[I]) {}
模板
void SortArray(int(&Arr)[I]){
现在,您可以使用I
,并且sizeof Arr
将像在函数的局部变量堆栈上一样进行报告
您可能不想这样做的原因是,每个大小的数组都将创建函数的新副本。可能会导致严重的肿胀
但是我使用这种技术创建了一个constepr字符串类型。您可以使用
reference\u wrapper
来模拟引用。此示例取自,演示如何使用它访问具有多个索引的容器。我假设这就是您希望排序函数所做的:对另一个容器中的项的引用进行排序
#include <algorithm>
#include <list>
#include <vector>
#include <iostream>
#include <numeric>
#include <random>
#include <functional>
int main()
{
std::list<int> l(10);
std::iota(l.begin(), l.end(), -4);
std::vector<std::reference_wrapper<int>> v(l.begin(), l.end());
// can't use shuffle on a list (requires random access), but can use it on a vector
std::shuffle(v.begin(), v.end(), std::mt19937{std::random_device{}()});
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
int main()
{
标准::列表l(10);
标准::物联网(l.begin(),l.end(),-4);
向量v(l.begin(),l.end());
//不能对列表使用洗牌(需要随机访问),但可以对向量使用洗牌
std::shuffle(v.begin()、v.end()、std::mt19937{std::random_device{}()});
}
您可以使用reference\u wrapper
模拟引用。此示例取自,演示如何使用它访问具有多个索引的容器。我假设这就是您希望排序函数所做的:对另一个容器中的项的引用进行排序
#include <algorithm>
#include <list>
#include <vector>
#include <iostream>
#include <numeric>
#include <random>
#include <functional>
int main()
{
std::list<int> l(10);
std::iota(l.begin(), l.end(), -4);
std::vector<std::reference_wrapper<int>> v(l.begin(), l.end());
// can't use shuffle on a list (requires random access), but can use it on a vector
std::shuffle(v.begin(), v.end(), std::mt19937{std::random_device{}()});
}
#包括
#包括
#包括
#包括
#包括
#包括
#包括
int main()
{
标准::列表l(10);
标准::物联网(l.begin(),l.end(),-4);
向量v(l.begin(),l.end());
//不能对列表使用洗牌(需要随机访问),但可以对向量使用洗牌
std::shuffle(v.begin()、v.end()、std::mt19937{std::random_device{}()});
}
为什么不使用void SortArray(int*Arr)?另一种方法是什么?你想解决的问题是什么?不清楚一个引用数组是如何与你所显示的代码相关的。<代码>主< /COD>必须在C++中返回<代码> int <代码>。你的问题实际上是清楚的,但是标题是误导的,大多数代码都是无关的。你可能应该把你的问题减少到你应该阅读的“参考数组”问题,如果你的老师正在做C++,他们应该告诉你。它基本上是一个动态数组,可以添加元素,删除元素等等。它可以作为引用传递(因为它是一个常规C++对象),它是一种更方便、隐藏的指针。C-方法是传递指向第一个元素和数组中元素总数的指针。为什么不使用void SortArray(int*Arr)?另一种方法是什么?你想解决的问题是什么?不清楚一个引用数组是如何与你所显示的代码相关的。<代码>主< /COD>必须在C++中返回<代码> int <代码>。你的问题实际上是清楚的,但是标题是误导的,大多数代码都是无关的。您可能应该将问题简化为“参考数组”