用c ++创建列表列表

时间:2018-01-16 16:37:21

标签: python c++ list vector

在C ++中,建议使用特定大小的列表的方法是什么,列表中的每个元素都是3个元素的列表?

类比

为了澄清,Python中我试图做的比喻如下:

最简单的:

n = 10
ls = [[0,0,0] for i in range(n)]

已经初始化我可以访问元素(例如ls[0][0])甚至修改它们(ls[0][0]=2),完美!

或使用numpy

import numpy as np
n  = 10 #number of elements
ls = np.empty((n,0)).tolist()

然后对每个元素(这里是一个列表),我们附加我们的3个值。

基本尝试

现在我理解在C ++中,一个起点差异就是专门定义内部列表应该包含的变量类型。但是vector不是c ++中的变量类型吗?正如在某些方面:

int n = 4;
vector<vector> ls(4);
for(int i=0; i<n; i++) {
    ls[i] = {0,0,0};
}

会错的。此外,如果我尝试vector<int> ls;,那么我无法为每个元素分配列表。

问题:

  • 有没有办法在C ++中使用vector使htis工作?
  • 或者,有没有更简单的方法来解决这个问题?

3 个答案:

答案 0 :(得分:3)

你可以创建一个2d向量,每个向量的大小为3,如下所示:

@mixin bidi

希望这有帮助。

答案 1 :(得分:3)

我能想到的最接近Python代码的是:

std::vector<std::vector<int>> ls(10, std::vector<int>(3));

如果在编译时已知大小,您也可以使用std::array

std::array<std::array<int, 3>, 10> ls;

答案 2 :(得分:2)

  

在c ++中,建议创建某个列表的方法是什么   size,列表中的每个元素是3个元素的列表?

     

[...]

     

已经初始化

如果在编译时修复了3,则可以使用std::array<T, 3>作为外部容器的元素类型。如果“特定大小”直到运行时才确定,那么外部容器将是动态的,如std::list

我们假设您的示例中Tint

#include <list>
#include <array>
#include <iostream>

int main()
{
    int n;
    std::cin >> n;
    std::list<std::array<int, 3>> list(n, { 1, 2, 3 });
    for (auto const& array : list)
    {
        std::cout << array[0] << ", " << array[1] << ", " << array[2] << '\n';
    }
}

请注意我是如何使用second std::list constructor overload指定用于初始化每个元素的值(std::array<int, 3> { 1, 2, 3 })。

如果您实际上不需要具有特定迭代器语义的列表,那么请std::vector优先于std::list