我是STL的新手,我无法理解矢量这种奇怪的行为。
在为问题编写代码时,我对pair<int,int>
的向量使用了两种类型的声明。
首先:
int n,m;
cin>>n>>m;
vector<pair<int,int> > v[n*m];
第二
int n,m,size;
cin>>n>>m;
size=n*m;
vector<pair<int,int> > v[size];
如果观察到第一个没有给出所需的结果,而第二个类型给我正确的结果。
这两种类型之间有什么区别吗?如果是,有什么区别?
答案 0 :(得分:1)
这些都不应该工作(甚至编译),因为你声明一个具有“动态”(运行时)大小的本地数组:
size_t x = 34;
int y[x]; // Error!
您的代码所做的是声明包含K
向量(vector<pair<int,int>>
)的数组,而您可能需要的是大小为K
的向量:
int n, m;
cin >> n >> m;
vector<pair<int,int> > v(n * m);