如何将矢量对象从一个类传递到另一个类

时间:2010-05-09 09:44:22

标签: c++

这就是我尝试使用我得到的一个答案发送矢量的方法。但是还没有解决。应该复制它到拍卖师。我想显示。

class Trader {   
private:   
        int nextBidId; 

public:   

        void loadRange( vector <Bid> & bids ) {} ;

class Simulator //Receives from the Trader,doent modify 
{ 
    vector <Bid> bids;
    Trader trader; 
    Auctioneer auctioneer; 

public: 
    void run(); 
}; 

void Simulator::run() { 
    trader.loadRange(vector<Bid> & bids);
    auctioneer.accept_bids(bid_vector::const_iterator begin, bid_vector::const_iterator end);
    auctioneer.displayBids();
} 

class Auctioneer // Has to receive from the simulator class 
{ 

public: 
    vector <Bid> bids,v2;
    void accept_bids(vector<Bid> & bids);
    void displayBids(){cout << "\tBid\t(" <<  setw(3) << bids.bidId << "\t " << setw(3) << bids.trdId  << "\t "  
                                          << setw(3) <<  bids.type <<"\t " << setw(3) << bids.qty <<"\t "  << setw(3) 
                                          << bids.price <<")\t\n "  ;    }
}; 

更新

我刚从另一个类复制了一个向量,现在正试图查看它的contednts.its返回错误:

错误: - 尚未宣布开始。我是否对矢量进行了decalre bigin?

void Auctioneer::accept_bids(const BidList& bid){ 
    vector<Auctioneer> *list;
    vector<Auctioneer>::iterator itr; // create an iterator

     for ( itr = list.begin();
     itr != list.end(); ++itr )
     cout << *itr << ' ';
}

2 个答案:

答案 0 :(得分:1)

选项1:只需传递矢量副本

只需将向量传递给B类中的函数(例如B::accept_bids(const bid_vector& bids),或者可能使用迭代器B::accept_bids(bid_vector::const_iterator begin, bid_vector::const_iterator end)),并使该函数将向量复制到具有赋值运算符的私有数据成员中(或std::copy()如果你使用迭代器)。这是最简单,最直接的解决方案。

选项2:您的矢量很大,复制它的成本(分配时间,复制时间,内存使用率)很高

如上所述传递向量,但不是获取向量的副本,而是存储引用(或迭代器)并确保原始向量的A类副本在传递给类后不会消失或更改乙

或者,使用std::auto_ptr传递它并使其明确(使用诸如give_bid_vector(std::auto_ptr<bid_vector> bids)之类的函数名称)B类获取向量的所有权。这意味着A类不再是向量的所有者,不应该删除它。

答案 1 :(得分:0)

我假设这是您正在谈论的代码:

{
    trader.loadRange(bidlist, NUMBIDS); 
    auctioneer.receiveBids(bidlist, NUMBIDS);
    auctioneer.displayBids(string ss){return str;}
}

在这种情况下,您需要使三个函数看起来像这样:

class Trader {
   ...
   void loadRange( vector <Bid> & bids ) {
      // do stuff with bids
   }
};

其他功能看起来一样。然后修改调用代码:

{
    vector <Bid> bidList;
    trader.loadRange(bidlist ); 
    auctioneer.receiveBids(bidlist);
    auctioneer.displayBids(string ss){return str;}
}

注意没有必要传递大小 - 向量有自己的size()成员。