有人可以通过示例解释下面的c ++语法吗?
vector <vector <int> > s(n,vector <int> ());
特别是构造函数中的这部分:
vector <int> ()
答案 0 :(得分:5)
这个vector的特定构造函数有两个参数:
例如,这会创建一个包含值5的3倍的向量。
std::vector<int> vec(3, 5);
vector<int>()
是vector<int>
的默认构造实例。所以你要创建一个包含n个向量的向量,每个向量都是空的。
答案 1 :(得分:0)
#include <vector>
using namespace std;
int main()
{
int N = 10;
std::vector< std::vector<int> vector2DA(N, std::vector< int>(N));
return 0;
}
此代码创建vector2D
10x10,第一个参数构造函数是大小基本向量(vector2DA(size,objectWhichIsContain)),其中包含其他向量,其大小为10(std::vector< int>(size)
)。我们有vector2D
10x10。
答案 2 :(得分:0)
首先,vector
的{{1}}不完全是“2D矢量”。 vector
的“行”在内存布局和语义方面完全独立。有更好的选择,例如Boost.Multi_array。
然后我们有vector<vector<>>
。根据上下文,这可能意味着临时对象初始化或函数声明。有问题的例子实际上没有提供足够的背景:
vector <int> ()
如果vector <vector <int> > s(n,vector <int> ());
恰好是类型名称,则此行是函数声明。当然n
可能是n
,但最好明确声明你想要一个默认构造的int
作为第二个参数:
vector<int>
此处vector <vector <int> > s(n,vector <int> {});
明确指的是“vector <int> {}
类型的默认构造临时对象,并将其作为值传递给vector<int>
构造函数使用初始化行。
这给我们带来了另一个观察:vector<vector<int>>
默认值初始化其元素,这意味着可以实现相同的结果:
std::vector
最后,原始语句中vector <vector <int> > s(n);
的出现提示它可能是为了设置2D向量的“宽度”:
vector<int>()
但vector <vector <int> > s(n,vector <int> (m));
在某处失去了一段时间:)