gpt4 book ai didi

c++ - 如何用 std vector 初始化 std 堆栈?

转载 作者:太空狗 更新时间:2023-10-29 21:17:26 25 4
gpt4 key购买 nike

我需要将一个 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
}

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

我必须遍历整个 vector 吗?最有效的方法是什么? documentation .

我试过 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) );
}

关于c++ - 如何用 std vector 初始化 std 堆栈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32805250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com