C++ STL 如何使用鍵盤讀取一行已知個數的數字並存入vector中

最近做了一些筆試題,發現筆試題那個系統需要手動輸入數據,爲此寫了一篇博客。

#include<iostream>
#include<vector>
using namespace std;
	
int main()
{    
	vector<int>a;
	int n;
	cin >> n;
	int b;
	for(int i = 0;i < n;i++)
	{
		cin >> b;
		a.push_back(b);
	}
	for(auto i:a)
	{
		cout<< i << " ";
	}
	return 0;
}

auto:用來聲明自動變量。它是存儲類型標識符,表明變量(自動)具有本地範圍,塊範圍的變量聲明(如for循環體內的變量聲明)默認爲auto存儲類型。
其實大多普通聲明方式聲明的變量都是auto變量,他們不需要明確指定auto關鍵字,默認就是auto的了。auto變量在離開作用域是會變程序自動釋放,不會發生內存溢出情況(除了包含指針的類)。使用auto變量的優勢是不需要考慮去變量是否被釋放,比較安全吧。
new:new是用來在堆上申請內存地址的關鍵字,他產生的變量不會自動釋放,除非delete來手動釋放,或者程序結束時由操作系統釋放,使用new的優勢是內存使用比較靈活,理論可以申請任意大小的內存區塊(實際與操作系統有關),但這很容易產生問題,一不小心忘記釋放對象,特別是在頻繁調用的函數內創建的對象忘記釋放時,會產生內存溢出,嚴重時導致程序出錯,系統崩潰。new一般都是在類的定義中使用,結合delete可以使包含new出來對象的類也具有自帶變量功能,這樣就繼承了兩種方式的優勢。

另外,最新的C++標準更新了auto關鍵字的功能
除了具有原有的含義外,還增加了一種類似其他高級語言的型別推導特性
使用auto來代替變量的類型,
前提是被明確類型的初始化變量初始化的,可以使用auto關鍵字
比如int i=10; auto a = i; //這樣a也是int類型了
這在使用一些模板類的時候,對於減少冗贅的代碼也很有用

另外一個題外話:auto的對應類型不是使用new出來的變量,而是static變量
static變量是程序接收的時候才釋放對象的,但它不需要手動釋放。
static如果在一個函數內申明,這每次進入這個函數時,還是使用第一次聲明的變量,並且還保存的上次使用的值(auto變量這時函數結束是即釋放了,再次調用這個函數是,有重新定義了一個新的變量)
static變量如果在結構和類中使用,這結構或類定義的一切對象,都將共享唯一static變量。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章