所以,我有这种情况:
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>]
我意识到使用 vector 载体并不友好,但是仍然应该编译并执行,对吗?为什么不呢?
谢谢你的帮助。
最佳答案
在表达式中:
myVector[i].push_back(tempVector);
子表达式
myVector
是std::vector<std::vector<double>>
,myVector[i]
是std::vector<double>&
,该 vector 上的push_back
需要double
,而不是std::vector<double>
。看来您想将第i个元素设置为
tempVector
,如果是这种情况,您应该这样做(假设您在此语句之后不需要tempVector
):myVector[i].swap(tempVector);
(虽然
myVector[i] = tempVector;
具有相同的净效果,但会更昂贵,因为它将分配和复制所有内容。swap
几乎无需花费(三个指针交换)就可以将tempVector
的内容移动到myVector[i]
中。)我知道有人会提出建议使用
myVector[i] = std::move(tempVector)
,这在C++ 11中也很好,但在C++ 03中不可用。两者之间的区别在于,对于swap
,保证在操作后myVector[i]
的原始内容在tempVector
内(在这种情况下myVector[i]
为空,所以没有关系)。另一方面,在标准中未定义tempVector
之后myVector[i] = std::move(tempVector);
的状态,它可以使 vector 为空,或者可以交换它,或者...唯一的保证是tempVector
对象可以在移动后销毁。关于c++ - 将vector <double>插入vector <vector <double >>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12690941/