【问题标题】:Pushing array to vector gives error [duplicate]将数组推送到向量会产生错误[重复]
【发布时间】:2013-07-03 18:10:29
【问题描述】:

我正在尝试用一些数组填充向量。 这段代码有什么问题?

#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]'

如何正确推送?

【问题讨论】:

  • 不要。使用std::array&lt;double, 10&gt;。这既可复制又可分配。
  • 我同意这个问题是重复的。虽然浏览了相关问题,但没有意识到......谢谢大家。

标签: c++ arrays c++11


【解决方案1】:

数组不能满足容器元素的要求。试试 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;
}

【讨论】:

  • 嗯,我想如果我有 using namespace std,array 就相当于 std::array。所以,这就是 和 [10] 的区别吧?
  • @sashkello 他们是两种完全不相关的类型。 C 风格的数组std::array类型。
【解决方案2】:

您不能将 C 样式的数组存储在 vector 或任何其他容器中。因为对于要存储在vector 中的类型,它需要是“可赋值的”,但 C 样式的数组不能满足这一点。

请改用std::array

【讨论】:

  • 它不需要复制构造函数(int 没有,std::auto_ptr 有);它必须是“可复制的”和“可分配的”(或 C++11 中的“可移动”)。 C 风格的数组都不是。
  • @JamesKanze 知道了,正在编辑我的话。
猜你喜欢
  • 2019-07-05
  • 1970-01-01
  • 1970-01-01
  • 2017-07-12
  • 1970-01-01
  • 1970-01-01
  • 2019-07-25
  • 1970-01-01
  • 2021-12-13
相关资源
最近更新 更多