C++ 更改已推送的列表(在向量上)是否会更改向量上的列表?

C++ 更改已推送的列表(在向量上)是否会更改向量上的列表?,c++,list,vector,C++,List,Vector,例如,我们有一个列表向量。我们把一个列表i推到for循环中的向量[0]上。然后随着循环的迭代,我们转到向量[1],并将新值分配给列表i,然后将其推送到向量[1]。在向量[0]上推送的列表i是否也会更改?多谢各位 否,除非您有一个std::reference\u wrapper,即std::list周围的向量向后推复制值(或移动右值)。请注意,您不能有一个包含普通引用的容器,这就是为什么您需要std::reference\u wrapper,以防您想要“模拟”将引用推回容器中 代码示例如下: #i

例如,我们有一个列表向量。我们把一个列表i推到for循环中的向量[0]上。然后随着循环的迭代,我们转到向量[1],并将新值分配给列表i,然后将其推送到向量[1]。在向量[0]上推送的列表i是否也会更改?多谢各位

否,除非您有一个
std::reference\u wrapper
,即
std::list
周围的向量<代码>向后推复制值(或移动右值)。请注意,您不能有一个包含普通引用的容器,这就是为什么您需要
std::reference\u wrapper
,以防您想要“模拟”将引用推回容器中

代码示例如下:

#include <iostream>
#include <list>
#include <functional>
#include <vector>

template<typename T>
void display(T const& container)
{
    for (auto && elem : container)
    {
        for (auto && i : elem)
        {
            std::cout << i << " ";
        }
        std::cout << std::endl;
    }
}

template<typename T>
void display_ref(T const& container)
{
    for (auto && elem : container)
    {
        for (auto && i : elem.get())
        {
            std::cout << i << " ";
        }
        std::cout << std::endl;
    }
}

int main()
{
    std::vector<std::list<int>> v1;
    std::vector<std::reference_wrapper<std::list<int>>> v2;

    std::list<int> l{1, 2, 3};

    v1.push_back(l);
    v2.push_back(l);

    // modify l
    l.front() = 42;

    // display
    display(v1); // unchanged
    display_ref(v2); // changed
}
#包括
#包括
#包括
#包括
模板
无效显示(T常量和容器)
{
用于(自动和元素:容器)
{
用于(自动和输入:元素)
{

std::coutA保留您分配给其元素的内容的副本。因此,当您将新值放入最初分配给向量的外部列表时,
vector[0]
中的列表不会更改。

您应该添加一个代码示例,以便我们能够清楚地理解您的意思。完美答案;有意义。