例如,我們有一個Vector列表。我們在一個for循環中將一個列表推到一個vector [0]上。然後,當循環迭代時,我們繼續向量[1]併爲列表i分配新值,然後將它們推送到向量[1]。我在vector [0]上推送的列表是否也會改變?謝謝。更改已經推入的列表(在矢量上)是否更改矢量上的列表?
0
A
回答
2
不,除非你有一個std::reference_wrapper<std::list>
的矢量,即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
}
+0
完美答案;說得通。 –
0
一個std::vector讓你分配給它的元素是什麼的副本。因此,在將新值添加到最初分配給矢量的外部列表中時,vector[0]
中的列表不會更改。
相關問題
- 1. 是否可以更改矢量圖層上懸停矢量圖層的zindex?
- 2. 檢查點是否已經在矢量/列表 - 性能
- 3. 更改矢量名
- 4. 更改爲矢量
- 5. 更改C++矢量
- 6. 更改已創建的矢量
- 7. 更改矢量元素
- 8. 如何更改矢量中的值?
- 9. 如何更改C++中的矢量項?
- 10. Play框架列表矢量
- 11. 矢量:類模板的參數列表:「的std ::矢量缺少」
- 12. 在向量的列表更改值
- 13. 從矢量列表中的元素中提取矢量
- 14. 從矢量列表中查找最接近的矢量| Python
- 15. 垂直於矢量上的矢量
- 16. 子矢量修改原始矢量
- 17. 矢量陣列是否構成2D矢量?
- 18. 更改對象推動它的地址爲矢量
- 19. 將字典列表更改爲scikit中的特徵矢量和目標
- 20. 矢量排序和更改數據
- 21. clojure更改爲地圖矢量
- 22. 排列矢量
- 23. 下拉列表已更改
- 24. SelectedIndices已更改列表框
- 25. SparkException:在Windows上添加矢量列
- 26. 更改列表中的每個向量
- 27. 列表[字符串] - >矢量矢量[字符]
- 28. 鏈接列表/矢量中的指針
- 29. - [R創建字符的列表矢量
- 30. R包含列表的展平矢量
您應該添加一個代碼示例,以便我們可以清楚地理解您的意思。 – Unda