例如,我们有一个列表 vector 。然后我们在 for 循环中将列表 i 推送到 vector[0] 上。然后随着循环迭代,我们继续 vector[1] 并为列表 i 分配新值,然后将其推送到 vector[1]。被推送到 vector[0] 上的列表 i 也会改变吗?谢谢。
最佳答案
不,除非你有 std::reference_wrapper<std::list>
的 vector ,即 reference wrapper std::list
周围. push_back
复制值(或移动右值)。请注意,您不能拥有普通引用的容器,这就是您需要 std::reference_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
}
关于c++ - 更改已推送的列表(在 vector 上)是否会更改 vector 上的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33191030/