![](/img/trans.png)
[英]How to pass a vector of objects to another class then call a function from within a member of an object in that vector?
[英]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.