2013-03-19 84 views
1

我正在编写一个选择排序程序。我刚刚发布了一些关于std :: vector的内容,但是这篇文章在另一个主题上。C++选择排序 - 插入方法和私有变量

我能够编译程序,但是当在main方法中调用insert()时,程序运行时发生运行时错误。

我的ArrayS具有下面的代码作为复制构造函数,并且在创建ArrayS时将nElems初始化为0。

[ArrayS.cpp]

ArrayS::ArrayS(int max) 
{ 
    std::vector<long> a;     
    nElems = 0; 
} 

void ArrayS::insert(long value) // put element into array 
     { 
     a[nElems] = value;    // insert it 
     nElems++;      // increment size 
     } 

[ArrayS.h]

private: 

std::vector<long> a; 

int nElems; 

现在,我需要得到在ArrayS.cpp/set方法来操纵nElems?我不知道你如何在C++中使用私有变量。

谢谢。

回答

1

向量记录它们的大小。为了高效,a[nElems]将假定您的vector足够大以适应该访问。

它看起来像你想:

void ArrayS::insert(long value) // put element into array 
     { 
     a.push_back(value);    // insert it AND increment size 
     } 

它也像你可以忽略nElems。如果你想要矢量的大小,只需拨打a.size()

+0

所以我可以完全忽视“nElems?”另外,std :: vector会改变我的程序的性质吗? – SndLt 2013-03-19 22:16:26

+0

因此,使用std :: vector,没有必要在我的程序中有“insert”方法,对吗?因为我只是使用“push_back”而不是insert()? – SndLt 2013-03-19 22:18:27

+0

@SndLt因为'a'是'private',所以只有成员函数可以访问它。这是一件好事,因为你可以控制它的访问方式。看我的编辑。 – 2013-03-19 22:20:37