C ++如何将数组int [10] push_back转换为std :: vector <int [10]>?

时间:2016-07-06 01:17:44

标签: c++ arrays vector stl

#include <vector>
using namespace std;

vector<int[60]> v;
int s[60];
v.push_back(s);

Visual Studio 2015社区中的此代码报告编译错误:

错误(活动)没有重载函数的实例&#34; std :: vector&lt; _Ty,_Alloc&gt; :: push_back [with _Ty = int [60],_ Alloc = std :: allocator]&#34;匹配参数列表

错误C2664&#39; void std :: vector&gt; :: push_back(const int(&amp;)[60])&#39;:无法从&#39; int&#39;转换参数1到&#39; int(&amp;&amp;)[60]&#39;

3 个答案:

答案 0 :(得分:13)

使用std::array代替:

#include <vector>
#include <array>

using namespace std;

int main()
{
    vector<array<int, 10>> v;
    array<int, 10> s;
    v.push_back(s);
    return 0;
}

但我还要质疑包含数组的向量的目的。无论是什么原因,都有可能成为实现相同目标的更好方式。

答案 1 :(得分:5)

你可以这样做:

#include <iostream>
#include <vector>

int main()
{
    int t[10] = {1,2,3,4,5,6,7,8,9,10};

    std::vector<int*> v;

    v.push_back(t);

    std::cout << v[0][4] << std::endl;

   return 0;
}

更具体地说,在这个解决方案中,你实际上并没有将数组t的值存储到向量v中,只是存储指向数组的指针(并且更具体地说是数组的第一个元素)

答案 2 :(得分:3)

我不确定你是说从数组初始化一个向量,如果是,这是使用向量构造函数的方法:

int s[] = {1,2,3,4};
vector<int> v (s,  s + sizeof(s)/sizeof(s[0]));