使用vector来保存类对象

时间:2017-11-15 04:24:12

标签: c++ class vector

求助:使用指针向量

我有一个名为Nurse的类,我想要一个大小为numNurses的Nurse对象的向量。每个对象都有唯一的数据。 我首先尝试使用代码

执行此操作
std::vector<Nurse> allNurses;
for (int i=0; i<numNurses; i++){ 
allNurses.push_back (Nurse(input,numShifts,numDays,inRow,nurMaxDay,nurMinDay,1));
}

但我发现改变任何护士的数据,有些人引用 all allNurses(例如allNurses[0])的索引会影响每个 向量的其他成员。

我想也许我只是需要在某个地方调用new,因为我可能永远不会创建新对象。尝试类似

的东西
allNurses[i]= new Nurse(input,numShifts,numDays,inRow,nurMaxDay,nurMinDay,1);
  

导致错误(我认为不太重要):

     

Optimize_Schedule.cpp:在构造函数中   'Optimize_Schedule :: Optimize_Schedule(INT)':

     

Optimize_Schedule.cpp:38:17:错误:'operator ='不匹配(操作数   类型是'护士'和'护士*')

 allNurses[i]= new Nurse(input,numShifts,numDays,inRow,nurMaxDay,nurMinDay,1);
             ^ In file included from Optimize_Schedule.cpp:5:0:
     

Nurse.h:15:7:注意:候选人:护士&amp;护士::操作员=(const护士&amp;)   class Nurse {

                                                                        ^
     

Nurse.h:15:7:注意:“护士*”中的参数1没有已知的转换   来自'const Nurse&amp;'

1 个答案:

答案 0 :(得分:0)

allNurses声明适用于vector或Nurse对象, 按值

std::vector<Nurse> allNurses;

所以你不想打电话给#34; new&#34;返回指针 关于&#39;运营商的投诉=&#39;是因为这一行试图将护士指针分配给护士实例

allNurses[i]= new Nurse(...);

关于原始症状:
没有足够的信息来理解为什么更改一个Nurse对象可能会影响其他人 - 但是可能会有不同的解释。由于这是对象的向量(不是对象指针的向量),因此当向量扩展时,可能会使用默认的复制构造函数。如果Nurse包含任何无法逐个元素复制的成员,那么您需要自己的复制构造函数。 (在C ++ 11中移动构造函数。)

替代方案可能是使用(智能)指针的向量。然后&#34;运营商=&#34;会工作。
(如果沿着这条路线走,请考虑使用智能指针,这样在需要释放向量时无需显式清理所有向量元素。)

顺便说一句,如果你有C ++ 11并且正在使用向量值,请考虑使用&#34; \ templace_back&#34;而不是&#34; push_back&#34;按原样追加新构造的Nurse对象,如下所示:

allNurses.emplace_back(input,numShifts,numDays,inRow,nurMaxDay,nurMinDay,1);