2013-07-03 34 views
2

我想用一些数组填充一个向量。 这段代码有什么问题?将数组推向向量给出错误

#include <vector> 
#include <array> 
using namespace std; 

int main(){ 

    double p[10]{1,2,3,4,5,6,7,8,9,10}; 
    vector<double[10]> p_prev; 

    p_prev.push_back(p); 

    return 0; 
} 

我与g++-std=c++11编译它。

error: request for member '~ double[10]' in '* __p', which is of non-class type 'double[10]' 

如何正确推送它?

+0

不要。使用'std :: array '。这是可复制和可分配的。 – juanchopanza

+1

我同意这个问题是重复的。没有意识到它,虽然浏览相关的问题...谢谢大家。 – sashkello

回答

2

数组不满足容器元素的要求。试试std :: array:

#include <vector> 
#include <array> 
using namespace std; 

int main(){ 

    std::array<double, 10> p{1,2,3,4,5,6,7,8,9,10}; 
    vector<std::array<double, 10> > p_prev; 

    p_prev.push_back(p); 

    return 0; 
} 
+0

嗯,我想如果我使用命名空间std,数组相当于std :: array。所以,这是和[10]之间的区别,对吧? – sashkello

+0

@sashkello他们是两个完全不相关的类型。 C风格的数组不会*类型'std :: array'。 –

2

您不能将C风格的数组存储在vector或任何其他容器中。因为对于要存储在vector中的类型,它需要是“可分配的”,但是C风格的数组不能满足这个要求。

改为使用std::array

+0

它不需要复制构造函数('int'没有一个,'std :: auto_ptr');它需要是“可复制”和“可分配”(或“可移动”,在C++ 11中)。 C风格的数组都不是。 –

+0

@JamesKanze明白了,编辑我的话。 –