C++ 如何将向量对象从一个类传递到另一个类

C++ 如何将向量对象从一个类传递到另一个类,c++,C++,这是我如何尝试发送向量使用我得到的答案之一,但还没有解决。应该复制它到达拍卖商。我想显示 class Trader { private: int nextBidId; public: void loadRange( vector <Bid> & bids ) {} ; class Simulator //Receives from the Trader,doent modify { vector <B

这是我如何尝试发送向量使用我得到的答案之一,但还没有解决。应该复制它到达拍卖商。我想显示

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 "  ;    }
}; 
类交易者{
私人:
int NEXTBIDD;
公众:
无效荷载范围(矢量和投标){};
类模拟器//从交易者处接收,不修改
{ 
矢量投标;
贸易商;
拍卖人拍卖人;
公众:
无效运行();
}; 
无效模拟器::运行(){
trader.loadRange(矢量和投标);
拍卖商。接受出价(出价向量::常量迭代器开始,出价向量::常量迭代器结束);
auctioneer.displaybods();
} 
类拍卖人//必须从模拟器类接收
{ 
公众:
矢量投标,v2;
无效接受投标(矢量和投标);

void displayBids(){cout我假设这就是您所说的代码:

{
    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;}
}
{
矢量投标清单;
交易者。装载范围(投标清单);
拍卖师。收到投标书(投标名单);
auctioneer.displayBids(字符串ss){return str;}
}

注意,不需要传递大小-向量有自己的size()成员。

我假设这就是您所说的代码:

{
    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;}
}
{
矢量投标清单;
交易者。装载范围(投标清单);
拍卖师。收到投标书(投标名单);
auctioneer.displayBids(字符串ss){return str;}
}

注意无需传递大小-向量有自己的size()成员。

选项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 bids)
)B类拥有向量的所有权。这意味着A类不再是向量的所有者,不应删除它。

选项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 bids)
)B类拥有向量的所有权。这意味着A类不再是向量的所有者,也不应该删除它。

发布一些说明问题的代码。这些代码远远超过了说明问题所需的代码。您需要努力减少代码,以充分显示问题的本质。您可以Don’不要用一个简单的例子忽略代码,你如何将投标向量从a类传递到B类,然后B类将其传递到C类。B是调解人。我将你的更新从答案转移到问题的澄清。你的问题是你将列表声明为指向向量的指针。去掉星号(*)在这一行中,您就可以开始了。此外,您还可以从使用typedef for vector而不必重复自己的操作中获得好处。此外,您是真的想要Auctioneer的vector,还是真的想要vector(并传入vector::iterator)。发布一些说明您的问题的代码。这些代码远远超过了说明问题所需的代码。您需要努力减少代码,以充分显示问题的本质。您可以只使用一个简单的说明,忽略代码,如何将投标向量从a类传递到B类,然后B类传递关于C类,B类是调解人。我将您的更新从答案移动到问题澄清。您的问题是您将列表声明为指向向量的指针。去掉星(*)在这一行上,您就可以开始了。此外,您将从使用typedef for vector而不必重复自己的操作中获得好处。此外,您真的想要Auctioneer的向量,还是真的想要vector(并传入vector::iterator)。通过迭代器传递的优点是,您可以仅使用谓词进行复制