簡體   English   中英

在向量和其他stl容器上進行迭代的樣式之間的差異

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM