动态对象数组

JKa*_*ase 8 c++

我知道我可以使用一些叫做的东西std::vector,但我担心因为课程限制而无法做到这一点.

我需要创建一个动态可扩展的对象数组.当需要存储新对象时,阵列应该增长和增长.

这是该数组所属的类:

class TransactionList
{
    private:
        Transaction *trans;
        int amountTransactions;
        Transaction newTrans;

    public:
        TransactionList();
        ~TransactionList();
        void read( istream &is );
        void write( ostream &os );
        void add( Transaction & newTrans ); 
        double totalExpenses();
        double hasPaid( string namnet );
        double isDebted( string namnet );
        //PersonList FixPersons();
 };
Run Code Online (Sandbox Code Playgroud)

方法"void add(Transaction&newTrans)"是我需要的方法.是的,我认真地必须做指针式.

到目前为止,这种方法完全不完整,甚至还没有接近功能.我已经尝试了几种不同的方法,但最终会出现运行时错误或仅仅是bollocks结果.

void TransactionList::add(Transaction & newTrans)
{
    Transaction* tempArrPtr;

    amountTransactions++;
    trans = new Transaction[amountTransactions]
    trans[amountTransactions - 1] = newTrans;
}
Run Code Online (Sandbox Code Playgroud)

我想要的方法是构建一个Transaction-objects数组,并在获取更多对象时增大其大小.

我希望我已经清楚地写了我的问题,希望有人能给我一个很好的答案.我试过谷歌搜索,但我仍然卡住了 - 否则我不会打扰他们:p

如果有人可以给出一些关于复制构造函数的指示,我会非常感激.在我们的课程材料中,他们几乎甚至没有展示复制构造函数应该是什么样子.就像"你需要复制构造进行深度复制,祝你好运!"

Mat*_*yas 5

您应该添加一个maxTransactions变量,它将指示trans*数组的已分配长度,并初始化两者ammountTransactionsmaxTransactions使用0.

当我们达到trans的极限时,你的数组会自动加倍


void TransactionList::add(Transaction & newTrans)
{
    if(amountTransactions == maxTransactions){ //we've reached the capacity of trans
        //allocate a new array
        Transaction* nuTrans = new Transaction[maxTransactions*2+1];
        //copy the old values of trans into nuTrans
        memcpy(nuTrans, trans, sizeof(Transaction)*maxTransactions);
        //deallocate the old trans array
        delete []trans;
        //set trans to point at your newly allocated array
        trans = nuTrans;
        //update maxTransactions
        maxTransactions = maxTransactions*2+1;
    }

    trans[amountTransactions] = newTrans;
    amountTransactions++;
}


Run Code Online (Sandbox Code Playgroud)

PS.我在这里直接写了它,我没有检查它是否作为一个整体编译或没有调试代码.但我把它作为你可以遵循的想法

编辑:工作示例@ http://ideone.com/uz1mE