例如,我们有一个列表向量。我们在for循环中的向量[0]上推送列表i。然后当循环迭代时,我们继续向量[1]并将新值分配给列表i,然后将其推送到向量[1]。在vector [0]上推送的列表i也会改变吗?谢谢。
答案 0 :(得分:2)
不,除非您有std::reference_wrapper<std::list>
的向量,即std::list
周围的reference wrapper。 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
}
答案 1 :(得分:0)
std::vector会保留您为其元素指定的内容的副本。因此,当您将新值放入最初分配给矢量的外部列表时,def declareWinner(usrchoice, cptrchoice):
if usrchoice == cptrchoice:
中的列表不会更改。