2010-05-09 182 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

相关问题