簡體   English   中英

如何將矢量對象從一類傳遞到另一類

[英]how to pass vector objects from one class to another

這是我嘗試使用獲得的答案之一發送矢量的方法,但尚未解決。應將其復制給拍賣人。我想顯示。

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.it返回錯誤:

錯誤:-尚未聲明begin。如何為矢量去除比金?

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 << ' ';
}

選項1:只需傳遞向量的副本

只需將向量傳遞到B類的函數中(例如B::accept_bids(const bid_vector& bids) ,或使用迭代器B::accept_bids(bid_vector::const_iterator begin, bid_vector::const_iterator end) ),然后復制該函數使用賦值運算符將向量轉換成私有數據成員std::copy()如果使用迭代器,則為std::copy() )。 這是最簡單,最直接的解決方案。

選項2:向量很大,復制的成本(分配時間,復制時間,內存使用量)很高

如上傳遞向量,但不要復制向量,而要存儲引用(或迭代器),並確保原始向量的A類副本在傳遞給B類后不會消失或改變。

或者,使用std::auto_ptr傳遞它,並清楚地表明(具有函數名稱,例如give_bid_vector(std::auto_ptr<bid_vector> bids) ),則B類正在擁有該向量的所有權。 這意味着類A不再是向量的所有者,並且不應刪除它。

我假設這是您正在談論的一些代碼:

{
    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()成員。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM