[英]Why can't I add items into my vector?
我在一個類中有以下代碼:
class A
{
std::vector<Parameter*> params;
std::vector<Parameter*> getParamVector() {return params;}
void addOneParam(Parameter* param)
{
params.push_back(param);
}
}
在另一個類B類中 ,我嘗試通過執行以下操作將項添加到params向量中:
classA_Ptr->getParamVector().push_back(aParamPtr);
但是在上面調用之后, 參數矢量的大小仍為0。
我必須添加上面的addOneParams(Parameter* param)
方法來將項添加到params向量中。 為什么?
getParamVector()
返回params
的副本 。 因此,當你將push_back
添加到它上面時,你會添加一個立即被刪除的臨時vector
。 這絕不會影響params
的大小。
如果您希望能夠通過getParamVector()
執行此操作,則必須返回對params
的引用 :
std::vector<Parameter*>& getParamVector() {return params;}
^^^
你應該通過引用或指針返回指出。
std::vector<Parameter*>& getParamVector() { return params; }
要么
std::vector<Parameter*>* getParamVector() { return ¶ms; }
但是,這是一個真正的問題:如果你已經有一個可以添加一個參數的方法,為什么需要調用getParamVector()。push_back()。
相反,你可以做classA_ptr-> addOneParam(p)。
編輯:對我來說,addOneParam()強制數據隱藏比獲取內部向量的引用/指針更好。
如果存儲參數的數據結構發生變化,則還需要修改調用者。
使用addOneParam(),調用者是絕緣的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.