所以,我有這樣的情況:推矢量<double>到矢量<矢量<double>>
vector<vector<double>> myVector;
myVector.resize(somePreviousObject.size());
for(int i = 0; i < myVector.size(); i++)
{
vector<double> tempVector;
//Do some stuff that fills tempVector, in a loop
//After loop:
myVector[i].push_back(tempVector);
}
然而,這將產生一個編譯錯誤,指出:
no matching function for call to 'std:;vector<double, std::allocator<double > >::push_back(std::vector<double, std::allocator<double> >&)'
...stl_vector.h:733 note: candidates are: void std::vector<_Tp, _Alloc>::push_back(const _Tp&) [with _Tp = double, _Alloc = std::allocator<double>]
我認識到使用矢量向量不是性能友好的,但它仍然應該編譯和執行,正確嗎?爲什麼不呢?
感謝您的幫助。
我認爲利用'swap'來進行常量值的賦值(在這種情況下,你想放棄源代碼)可以很好地隱藏在析構函數中執行swap()的小助手對象中。像'container_update> tmp(myVector [i]);'它在內部維護一個std :: vector ,並在'tmp'對象超出範圍時立即用myVector [i]交換它。 –
@FrerichRaabe:我明白你的意思,但我不同意。代碼應該清楚它的功能。如果操作比較複雜,我會加一個幫手,但是我認爲沒有意義。另外請注意'swap'有其他副作用('tmpVector'變化),看看這個函數調用可能並不明顯。最後,我會發現通過完全刪除代碼並使用引用可以更容易地閱讀:'std :: vector&tempVector = myVector [i];'(但這意味着即使舊分配行沒有達到) –
啊啊,我覺得真的很傻。我將堅持使用C++ 03交換方法而不是C++ 11移動,因爲我無法保證用戶基礎將具有C++ 11。感謝幫助! –