首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在vector<vector<double>>上推送vector<double>

在vector<vector<double>>上推送vector<double>
EN

Stack Overflow用户
提问于 2012-10-02 21:13:05
回答 3查看 2.1K关注 0票数 0

所以,我有这样的情况:

代码语言:javascript
复制
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);
}

但是,这会产生一个编译错误,声明:

代码语言:javascript
复制
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>]

我意识到使用向量的向量不是性能友好的,但它仍然应该编译和执行,对吗?为什么不是呢?

谢谢你的帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-02 21:43:17

在表达式中:

代码语言:javascript
复制
myVector[i].push_back(tempVector);

子表达式myVectorstd::vector<std::vector<double>>myVector[i]std::vector<double>&,该向量上的push_back需要double,而不是std::vector<double>

看起来您希望将第i个元素设置为tempVector,如果这是您应该这样做的话(假设您在此语句后不需要tempVector ):

代码语言:javascript
复制
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]是空的,所以这不重要)。另一方面,myVector[i] = std::move(tempVector);之后的tempVector的状态在标准中是未定义的,它可以将向量保留为空,也可以交换它或...唯一的保证是tempVector对象可以在移动后销毁。

票数 8
EN

Stack Overflow用户

发布于 2012-10-02 21:13:49

要么就是

代码语言:javascript
复制
myVector[i] = tempVector;

代码语言:javascript
复制
myVector.push_back(tempVector);

既然你事先调整了向量的大小,我假设你想要第一个版本。

在您的代码中,请记住myVector[i]本身就是一个vector<double>,这就是它不能工作的原因。

票数 2
EN

Stack Overflow用户

发布于 2012-10-02 21:43:23

代码语言:javascript
复制
vector<vector<double>> myVector;  

应该是:

代码语言:javascript
复制
vector<vector<double> > myVector;  

然后

代码语言:javascript
复制
myVector[i].push_back(tempVector); 

应该是

代码语言:javascript
复制
myVector.push_back(tempVector); 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12690941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档