Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C+中对象动态数组中的气泡排序+;_C++_Arrays_Dynamic - Fatal编程技术网

C++ C+中对象动态数组中的气泡排序+;

C++ C+中对象动态数组中的气泡排序+;,c++,arrays,dynamic,C++,Arrays,Dynamic,我有以下私人数据的城市等级:城市名称、宽度、长度和高度。我必须在程序启动时制作动态数组,默认情况下由构造函数-City()插入。然后程序使用方法output()打印插入的城市数组 我应该用气泡排序法按城市的长度排序。完成后,程序将以递增的长度显示已排序的城市 问题是我的数据是私人的(在公共场合,一切都很好,但违反了封装原则!),所以我不能进行冒泡排序 我试图做另一个类型为double-double-length[n]的动态数组,内容是第一个数组的长度。然后我进行排序,但程序只打印排序后的长度,这

我有以下私人数据的城市等级:城市名称、宽度、长度和高度。我必须在程序启动时制作动态数组,默认情况下由构造函数-City()插入。然后程序使用方法output()打印插入的城市数组

我应该用气泡排序法按城市的长度排序。完成后,程序将以递增的长度显示已排序的城市

问题是我的数据是私人的(在公共场合,一切都很好,但违反了封装原则!),所以我不能进行冒泡排序

我试图做另一个类型为double-double-length[n]的动态数组,内容是第一个数组的长度。然后我进行排序,但程序只打印排序后的长度,这不是我的目标

我应该打印按长度排序的城市名称

代码:

class城市{
private:char*名称;
双倍宽度;
双倍长度;
双高;
public:void Output();
城市();
~City();
双GetLength()
{
返回长度;
}
double GetWidth(){return width;}
double GetHeight(){返回高度;}
char GetName(){return*name;}
};
城市::城市()
{
字符输入法[20];
cout>ime;
name=新字符[strlen(ime)+1];
对于(int i=0;i宽度;
长度;
cout>高度;
}
void City::Output()
{

cout我看不到直接的问题,但我可以通过你的故事来假设大部分问题。关于如何解决这个问题,你有多种选择。解决这个问题的简单方法之一是在对象内创建一个函数,允许你获取对象成员的长度,例如,在你的例子中,它将是城市名称


在对象内部创建一个方法,您可以调用该方法来返回私有方法的长度。创建一个循环来调用此方法并并排检查每个元素,直到您无法再细化它。使用char而不是string作为名称有什么具体原因吗?

我不完全确定您的要求

然而,从我能告诉你的主要问题是,你不能排序,因为你试图比较两个对象的两个私有变量

如果将对象放置到city类型的数组中,则可以按长度进行bubblesort,但是需要使用getter来引用排序期间专用的变量

例如(不是精确的语法)

if(cityArray[0].getLength()
由于我无法对您的回答做出评论,我将给您一些建议。首先:

数组[j]=mA[j].GetName()

你有一个随机的空间,它可能是一个副本更改,相对较小,但用于阅读目的,这是错误的

其次,你的命名约定确实是你应该研究的东西。我应该能够读懂一个变量,理解它的意思,但是我很难理解一个名为mA的变量的意思

第三,你的else子句没有任何字面意义上的作用。你不移动数组的任何部分,如果这是你的意图,我说:

mA[j+1];
你只是把目标对准了迭代上面的数组中的元素。我看到你坚持你的想法,制作类似于冒泡排序的并行数组,这很好,但在第一个循环中没有任何动作

这不是冒泡排序,因为您只是简单地进行每次迭代,检查长度中的元素是否与mA中的元素长度相等,然后将该元素存储在数组中,但else语句不起任何作用

你的循环看起来应该类似于这样,但出于某种原因,我将去掉字符数组和额外数组,因为它是不必要的,假设你从一个对象数组开始:

        if(myObjects[i].GetLength() > myObjects[i+1].GetLength()) //Shortest to longest name or vice versa?
        {
             //Store myObject[i] in temp spot
             //myObject[i] = myObject[i+1]
             //myObject[i+1] = temp Storage
        }

这将在第一轮中为您提供对象的冒泡排序。当然,您必须了解如何迭代循环中的数组,以验证所有元素都已正确排序,因为冒泡排序当然需要多次迭代。

您已经违反了规则或0、3、5。请至少添加一个副本构造函数和
operator=
。我认为这可能是重复的,只是为了尝试实现冒泡排序作为一种学习练习。因为,在任何实际程序中,您都应该使用。
mA[j+1];
        if(myObjects[i].GetLength() > myObjects[i+1].GetLength()) //Shortest to longest name or vice versa?
        {
             //Store myObject[i] in temp spot
             //myObject[i] = myObject[i+1]
             //myObject[i+1] = temp Storage
        }