我想要創建一個對象,將該對象放入vector
,並且仍然能夠通過僅訪問vector
來修改同一個對象。但是,我知道當一個對象是push_back()
到vector
時,該對象實際上被複制到vector
。因此,訪問vector
中的對象將僅訪問一個類似但不同的對象。僅使用標準庫創建「矢量矢量」的標準操作
我有一個初學者在C知識,讓我知道我可以創建一個指向對象的指針,使指針的載體。例如vector<Object *>
。但是,似乎pointers是C++中的discouraged,以及references are preferred。然而,I cannot make a vector of references。
我希望只使用標準庫,所以boost
是關閉的限制我。
我聽說過智能指針。但是,它看起來好像有多種類型的智能指針。這對於這個目的不會過分嗎?如果智能指針確實是答案,那麼我該如何確定使用哪一個?
所以我的問題是:什麼是用於創建引用/指針到對象的矢量標準的做法?
換句話說,希望下面(僞)代碼工作。
#include <iostream>
#include <cstdlib>
#include <vector>
using namespace std;
class Object
{
public:
int field;
};
vector<Object> addToVector(Object &o)
{
vector<Object> v;
v.push_back(o);
v[0].field = 3; // I want this to set o.field to 3.
return v;
}
int main()
{
Object one;
one.field = 1;
cout << one.field << endl; // 1 as expected
Object &refone = one;
refone.field = 2;
cout << one.field << endl; // 2 as expected
vector<Object> v = addToVector(one);
cout << v[0].field << endl; // 3 as expected
cout << one.field << endl; // I want to get 3 here as well, as opposed to 2.
return 0;
}
只要向量不需要擔心它們指向的對象的生命週期,指針向量就沒有問題。 – juanchopanza
改用智能指針向量。我很確定這個問題是重複的。 –
對不起,如果它是重複的。我發現的唯一一個類似於我的問題提出了使用boost,我希望避免。如果這確實是重複的,請讓我知道。 – Zsw