2010-05-09 177 views
1

這就是我曾經嘗試使用我得到的答案之一發送矢量,但還沒有解決的問題。如果要複製它,並將其發送給auctioneer.I要顯示。如何將矢量對象從一個類傳遞到另一個類

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

UPDATE

我剛纔複製從另一個類的載體,現在想看到它的contednts.its返回一個錯誤:

錯誤: - 開始尚未宣佈。我如何爲矢量去除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 << ' '; 
} 
+3

發佈一些說明您的問題的代碼。 – 2010-05-09 09:46:13

+1

這是比說明事情所需的更多的代碼。您需要努力減少代碼,以顯示問題的本質。 – 2010-05-09 10:40:18

+0

那麼你可以用一個簡單的例子來忽略代碼,你將如何通過一個向A類投標的向量傳遞給B類,然後B類將它傳遞給C類。B是仲裁者。 – wilson88 2010-05-09 10:45:00

回答

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

+0

我也是這樣試過的,出錯 ''='(=拍賣人*)this'中的'operator ='不匹配' - > Auctioneer :: bidList' [code] vector bidList; void receiveBids(string ss){ss = bidList;}; void displayBids(){cout << bid.bidId,.....; } [/ code] – wilson88 2010-05-09 21:45:28

+0

感謝您的協助,它在解決方案2中得到了很好的效果 – wilson88 2010-05-10 08:21:49

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類的原始矢量副本在傳遞到B類後不會消失或更改。

或者,使用std::auto_ptr並將其清除(使用函數名稱,如give_bid_vector(std::auto_ptr<bid_vector> bids)),B類正在接受向量的所有權。這意味着A類不再是矢量的所有者,不應刪除它。

+0

迭代器傳遞的優點是您可以僅使用謂詞複製第二個類感興趣的出價,或者您可以處理向量在你可能不需要處理所有情況的情況下以懶惰的方式。 – 2010-05-09 11:10:23

+0

如果您使用引用傳遞,則不會傳遞副本。 – 2010-05-09 11:11:31

+0

你是對的,但我找不到我說的那個地方。選項1是關於B副本,選項2是關於B與A共享向量。 – 2010-05-09 23:40:17

相關問題