在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;
,那么我无法为每个元素分配列表。
问题:
vector
使htis工作?答案 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
。
我们假设您的示例中T
为int
:
#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
。