使用基于范围的for循环将对象强制返回到向量的正确方法是什么?C++

Eub*_*ubs 2 c++ stl vector

我有一个对象,我想将它添加到矢量容器中,但我想知道我有两种方法做同样的事情吗?什么是正确的方法呢?

我之所以这样做m_boid.emplace_back(std::move(bird));是因为bird是一个基于范围的循环变量,如果我不使用bird它会提示我一个警告说Unsed变量bird但是程序仍然可以运行,因为它不是错误.

使用基于范围的for循环将对象强制返回到向量的正确方法是什么?

先感谢您.

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?
    }
}
Run Code Online (Sandbox Code Playgroud)



编辑.这个怎么样?这个可以吗?

void Boid::initBoid(unsigned int containSize)
{

    m_boid.resize(containSize);

    for(auto &bird : m_boid)
    {
        bird.reset(new Boid);
        bird->createVAO();
    }
}
Run Code Online (Sandbox Code Playgroud)

sky*_*ack 5

使用基于范围的for循环将对象强制返回到向量的正确方法是什么?

我不会说.emplace_back如果重新分配,可能会使迭代器无效,因此在这种情况下你会得到一个UB.

  • @Eubs为什么在地球上你认为`for`循环不是标准的C++ 11? (2认同)