【问题标题】:Initialize a 2 Dimensional vector<int> in CPP在 CPP 中初始化一个二维向量<int>
【发布时间】:2011-05-04 17:56:48
【问题描述】:

如何在 C++ 中初始化一个二维的vector&lt;int&gt;

例如,我有 4 个数组,每个数组长度为 8 个整数,如下所示

int a1[] = {1,2,3,4,5,6,7,8};
int a2[] = {1,2,3,4,9,10,11,12};
int a3[] = {1,2,5,6,9,10,13,14};
int a4[] = {1,3,5,7,9,11,13,15};

我有这个

vector< vector <int> > aa (4);

aa[i] (a1,a1+8);

但这会产生错误。我什至尝试将数组 a1 提供给 v1 并将 v1 传递给 aa[i] ,但仍然失败。

那么初始化二维vector&lt;int&gt;的元素的正确方法是什么

【问题讨论】:

  • 每个子数组的长度是否正好为 8 个整数?简单地拥有一个平坦的一维数组可能更容易,a1 占据前 8 个位置,a2 占据后 8 个位置,依此类推。

标签: c++ vector initialization multidimensional-array int


【解决方案1】:
aa[i].assign(a1,a1+8);

【讨论】:

  • +1 - 这个答案更好。我本来打算使用assign,但由于SGI 页面上没有assign 而被抛弃。
【解决方案2】:

aa 的初始化还使用vector&lt;int&gt; 的默认构造函数初始化了所有四个包含的vector&lt;int&gt; 对象。所以你需要向那些空向量添加数据,而不是初始化它们。

试一试:

std::copy(a1, a1+8, std::back_inserter(aa[i]));

【讨论】:

  • 你的意思是,back_inserter(aa[i])
【解决方案3】:
int arr[4][8] =
{
    {1, 2, 3, 4, 5,  6,  7,  8},
    {1, 2, 3, 4, 9, 10, 11, 12},
    {1, 2, 5, 6, 9, 10, 13, 14},
    {1, 3, 5, 7, 9, 11, 13, 15},
};

std::vector<std::vector<int> > vec(4, std::vector<int>(8));
for (int i = 0; i < 4; ++i)
{
    vec[i].assign(arr[i], arr[i] + 8);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-04
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    • 2011-12-13
    • 1970-01-01
    相关资源
    最近更新 更多