如何使用 std 向量初始化 std 堆栈?

2024-02-03

我需要放一个std::vector进入一个std::stack.

到目前为止,这是我的方法(我正在构建纸牌游戏):

void CardStack::initializeCardStack(std::vector<Card> & p_cardVector) {
   m_cardStack = std::stack<Card>();
   //code that should initialize m_cardStack with p_cardVector
}

注意:我无法更改我的方法签名,因为它是老师强加的......

我是否必须迭代整个向量?最有效的方法是什么?这文档 http://www.cplusplus.com/reference/stack/stack/stack/.

我已经尝试过 Jens 的回答,但没有成功。


std::stack没有接受迭代器的构造函数,因此您可以构造一个临时的deque并用以下命令初始化堆栈:

void ClassName::initializeStack(std::vector<AnotherClass> const& v) {
   m_stackAttribute = std::stack<AnotherClass>( std::stack<AnotherClass>::container_type(v.begin(), v.end()) );
}

但是,这会将每个元素复制到容器中。为了获得最大效率,您还应该使用移动语义来消除副本

void ClassName::initializeStack(std::vector<AnotherClass>&& v) {
   std::stack<AnotherClass>::container_type tmp( std::make_move_iterator(v.begin()), std::make_move_iterator( v.end() ));
   m_stackAttribute = std::stack<AnotherClass>( std::move(tmp) );
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 std 向量初始化 std 堆栈? 的相关文章

随机推荐