这就是我尝试使用我得到的一个答案发送矢量的方法。但是还没有解决。应该复制它到拍卖师。我想显示。
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 << ' ';
}
答案 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()成员。