所以,我有这样的情况:推矢量<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。感谢帮助! –