簡體   English   中英

使用基於范圍的for循環將對象emplace_back到向量中的正確方法是什么? C ++

[英]What is the correct way to emplace_back an object into a vector using the range-based for loop? C++

我有一個對象想要將其添加到向量容器中,但是我想知道這是我做同一件事的兩種方式嗎? 正確的方法是什么?

我之所以m_boid.emplace_back(std::move(bird)); 這是因為bird是一個基於范圍的循環變量,如果我不使用bird ,則會提示我一個警告,提示Unsed變量bird但是程序仍然可以運行,因為這不是錯誤。

使用基於范圍的for循環將對象emplace_back到向量中的正確方法是什么?

先感謝您。

Boid::Boid(int size)
{
    m_boid.resize(size);  //vector of unique pointer

    for(auto &bird : m_boid)
    {
        //Create an object
        m_obj.reset(new Boid); //unique pointer

            // Add object to vector. Is this 2 below the same thing?
            m_boid.emplace_back(std::move(bird));  //Should I do this?
            m_boid.emplace_back(std::move(m_obj)); //Or should I do this?
    }
}



編輯。 這個怎么樣? 這個可以嗎?

void Boid::initBoid(unsigned int containSize)
{

    m_boid.resize(containSize);

    for(auto &bird : m_boid)
    {
        bird.reset(new Boid);
        bird->createVAO();
    }
}

使用基於范圍的for循環將對象emplace_back到向量中的正確方法是什么?

我不會說。 在重新分配的情況下, emplace_back可能會使迭代器無效,因此在這種情況下,您將獲得一個UB。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM