我需要放一个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(使用前将#替换为@)