我想有一個類成員變量可以在地圖中的項目之間切換,以便修改時,地圖的內容也會被修改。使用類成員變量作爲參考
除了使用指向地圖內容的指針外,還有其他方法嗎?舊代碼只需要變量,現在新代碼需要切換。如果我更改變量類型,則需要更改使用此成員變量的所有函數。並不複雜,但是我會發現在任何地方都有它的前景是醜陋的......
參考變量不能被反彈,所以我該怎麼做到這一點?
class A
{
std::map<std::string,std::vector<int>> mMyMap;
std::vector<int>& mCurrentVector;
std::vector<int>* mCurrentVectorPointer;
std::vector<int> mDefaultVector;
void setCurrentVector(int iKey);
void addToCurrentVector(int iValue);
}
A::A():
mDefaultVector(std::vector<int>())
mCurrentVector(mDefaultVector)
{
mMyMap["key1"] = std::vector<int>(1,1);
mMyMap["key2"] = std::vector<int>(1,2);
mCurrentVectorPointer = &mMyMap[0];
}
A::setCurrentVector(std::string iKey)
{
if(mMyMap.find(iKey) != mMyMap.end())
{
mCurrentVector = mMyMap[iKey]; //can't change a reference...
mCurrentVectorPointer = &mMyMap[iKey]; //could use pointer, but
}
}
A::addToCurrentVector(int iValue)
{
mCurrentVector.push_back(iValue);
//or
(*mCurrentVectorPointer).push_back(iValue);
//
mCurrentVectorPointer->push_back(iValue);
}
void main()
{
A wClassA();
wClassA.setCurrentVector("key2");
wClassA.addToCurrentVector(3);
wClassA.setCurrentVector("key1");
wClassA.addToCurrentVector(4);
}
mMyMap [ 「鍵1」]現在包含1,4
mMyMap [ 「KEY2」 現在包含2,3
保存c urrent鍵並在add函數中使用'mMyMap [currentKey] .push_back(iValue)'。 –
粉碎,這個示例代碼充滿了錯誤,它更多的是分心而不是澄清。 – user4581301
只需使用向量並使用運算符 - >。 * mCurrentVectorPointer.push_back是語法錯誤!另一種解決方案是創建一個可以模擬矢量接口的vector_view,不幸的是,點運算符沒有在C++ 17中創建,實現時間比切換到指針替代方案要長。 – Oliv