在 C++ 中排序后如何调用数组中的变量?
Posted
技术标签:
【中文标题】在 C++ 中排序后如何调用数组中的变量?【英文标题】:How do you call a variable in an array after sorting it in C++? 【发布时间】:2017-05-12 04:44:06 【问题描述】:我要做的是通过函数对数组中的变量进行排序(升序)。
我的功能是:
void xpPoints_Sorting ()
int xpPoints[] = 620, 500, 250, 1000, 830, 100, 370 ;
int temp;
for(int i=1;i< 7;++i)
for(int j=0;j<(7-i);++j)
if(xpPoints[j] > xpPoints[j+1])
temp = xp[j];
xpPoints[j] = xpPoints[j+1];
xpPoints[j+1] = temp;
问题是当我在 int main() 中键入 xpPoints[0] 时,输出仍然是“620”而不是“100”。
int main()
xpPoints_Sorting ();
int xpPoints[] = 620, 500, 250, 1000, 830, 100, 370 ;
cout << xpPoints[0];
但是,当我没有将它放入函数并将其放入 int main() 时,它工作得非常好并输出“100”。
如何在保持数组排序功能的同时让它工作?
【问题讨论】:
xpPoints
对 main 来说是本地的,不是吗?你在哪里将数组传递给函数?
是什么让您认为它是main
和xpPoints_Sorting
中的同一个数组?
【参考方案1】:
在 idomatic C++ 中,您可以使用 std::sort
算法来实现您想要做的事情:
#include <algorithm>
int main()
int xpPoints[] = 620, 500, 250, 1000, 830, 100, 370 ;
std::sort(xpPoints,xpPoints + 7);
cout << xpPoints[0];
【讨论】:
我不确定我的老师是否允许我使用它,但谢谢!【参考方案2】:您似乎对作用域在 C++ 中的工作方式感到困惑。您在 main()
中定义了一个名为 xpPoints
的数组,但它是该函数的本地。简单地调用一个对另一个数组进行排序的函数对您的本地 xpPoints
数组没有影响。因此,当您打印第一个元素时,什么都没有改变。
要解决这个问题,您可以重构 xpPoints_Sorting()
,使其将数组作为输入,然后对其进行排序,例如:
void xpPoints_Sorting (int xpPoints[], int length)
int temp;
for (int i=1; i < length; ++i)
for (int j=0; j < (length-i); ++j)
if (xpPoints[j] > xpPoints[j+1])
temp = xp[j];
xpPoints[j] = xpPoints[j+1];
xpPoints[j+1] = temp;
然后在你的main()
函数中:
int main()
int xpPoints[] = 620, 500, 250, 1000, 830, 100, 370 ;
xpPoints_Sorting(xpPoints, 7);
cout << xpPoints[0];
【讨论】:
我尝试过这样做,但出现错误并显示“'int xpPoints []' 的声明会影响参数” @Confused.Student 从排序函数 q.v 中删除不必要的xpPoints
数组声明。我上面的更新代码。
哦,我明白了。非常感谢你!我现在明白了。
我认为重要的是要注意,将数组的长度也传递给函数是(至少)有用的,而不是硬编码它。
@slawekwin 好主意。以上是关于在 C++ 中排序后如何调用数组中的变量?的主要内容,如果未能解决你的问题,请参考以下文章