[英]Difference between styles of iterating over vectors and other stl containers
假設有一個stl容器,為簡單起見,我將使用一個聲明為
得到答案后,我意識到這是因為我實際上不是在遍歷int
而是自定義數據結構模板T
,只是進行編輯,以便將來有人會更容易理解。
std::vector <T> vec;
現在有兩種常見的方法可以對其進行迭代。
1。
for(std::vector<T>::iterator it = vec.begin(); it != vec.end(); ++it)
{
/* std::cout << *it; ... */
}
2。
for(T t: vec)
{
/* std::cout << t; ... */
}
現在,我一直以為這兩種方法在后台基本相同,並且應該具有相似的運行時,但是最近在hackerearth競賽中,第二個方法(我通常的Goto)在最后一個測試用例上給了TLE,只是通過切換對於第一種方法,我設法讓所有案例都通過了,我是否錯過了一些區分它們的東西,或者這只是一個巧合(因為它們的運行時之間的實際差異是微小的,僅在極限的另一側)。 我什么都找不到,所以如果您有任何鏈接或見解,請分享。
這會將變量從向量復制到t中:
for(int t: vec)
{
/* std::cout << t; ... */
}
對於int
我認為這不會有太大的區別。
但是,如果您正在使用帶有復制構造函數的類,則可以嘗試使用引用:
for(int& t: vec)
{
/* std::cout << t; ... */
}
如果不修改變量,請使用const int&
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.