在竞争性编程中,我看到人们初始化向量对,如下所示:
#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> ii;
typedef vector<ii> vii;
vector<vii> AL;
int main(){
int V, E; scanf("%d %d", &V, &E);
AL.assign(V, vii());
}
我想问一下AL.assign(V, vii());
,我知道AL
中会有V
对,但这里vii()
的含义是什么?
来自参考:
void assign (size_type n, const value_type& val);
新内容是n个元素,每个元素初始化为
val
的副本。
val
要填充容器的值。中的n个元素中的每一个容器将被初始化为该值的副本。成员类型value_type是容器中元素的类型,在中定义向量作为其第一模板参数(T(的别名。
@user4581301评论道:";vii()
构造一个临时变量,该变量将在assign方法中使用,然后超出作用域。幸运的是,临时的副本(假设编译器没有做一些节省时间的把戏(,所以AL
不会被留下来引用死空间;。
在中
AL.assign(V, vii());
vii()
执行std::vector
默认构造函数以提供临时对象,该临时对象将由std::vector::insert
用作模板(英语术语,而不是C++template
(。该临时将被有效地复制V
次,用pair
s中的V
vector
s填充AL
,然后它将超出范围。