话说咱写 $\text{STL}$ 的时候经常会要写迭代器,大概是这么一大串东西:
vector<int>::iterator iter = data.begin();
好烦啊!而且,$\text{iterator}$ 这个单词容易写错($\text{CE}$:走好不送)……
于是,在 $\text{C}$ 艹 $11$标准中,$\text{C}$ 艹开发者发明了一个超级好用的东西:$\text{auto}$!
$\text{auto}$ 这货类似于 $\text{Python}$ 定义变量,会自动确定它的类型!
如:
auto a = 3; // a为int类型
auto b = a + 0.1; // b为double类型
好爽哦有木有!
于是,开头的那段代码就可以写成这德行:
auto iter = data.begin();
你以为这就结束了?不,还有!
咱还能这么玩:
for (auto i : data) { // 不用auto写也行,只不过auto较简便
// 正常写,i是普通的迭代器
}
不过需要注意几点:
-
$\text{auto}$ 和 $\text{for}$ 里用冒号的写法和 $\text{to_string}$ 函数一样,都是$\text{C}$ 艹 $11$的新特性,在$\text{Dev-C}$ 艹中需要单独设置(否则直接炸裂)
-
比赛时采用 $\text{C} $艹 $14$ 标准,可放心使用
-
$\text{auto}$ 因为要自动判断类型,运行速度会略慢一丁点,不过差距大概就是$\text{scanf}$ 和 $\text{cin}$那点,一般 $€€£$ 不会在这点上卡常的($\text{ps}$:据说 $€€£$ 在敛财将评测机由“老爷机”置换为“少爷机”,传闻新评测机能够在 $1$ 秒内 $\text{AC}$($10^5 \times 10^5$)的数据。但只是传言!现在还没有那么快!老老实实把代码时间复杂度降下来吧)……
-
别尝试 $\text{auto}$ 一个数组,否则大概是这个场景:
你:
auto arr[10086];
编译器:
这踏马谁知道arr这货是啥类型啊……
$\text{Python}$ :
我咋可以呢?
编译器:
废话你啥都能存进去……
评测组件:
Compile Error!
$€€£$ 砖家组:
唉,又一个爆0了的……
到时候别怪我没提醒你啊……