簡體   English   中英

在C ++ STL中訪問deque元素的最佳方法是什么

[英]What is the best way to access deque's element in C++ STL

我有一個雙子座:

deque<char> My_Deque;
My_Path.push_front('a');
My_Path.push_front('b');
My_Path.push_front('c');
My_Path.push_front('d');
My_Path.push_front('e');

有這樣的方法輸出它。

首先:

deque<char>::iterator It;
for ( It = My_Deque.begin(); It != My_Deque.end(); It++ )
    cout << *It <<  " ";

第二:

for (i=0;i<My_Deque.size();i++) {
    cout << My_Deque[i] <<  " ";
}

訪問deque元素的最佳方法是什么 - 通過迭代器或像這樣: My_Deque[i] deque <...>元素是一個指向每個元素的指針數組,用於快速訪問它的數據,或者以連續的方式提供對它的隨機元素的訪問(如下圖所示)? 在此輸入圖像描述

既然你要求“最好的方式”:

for (char c : My_Deque) { std::cout << c <<  " "; }

STL deque通常實現為固定大小數組的動態數組,因此索引訪問非常有效。

既然你要求“最好的方式”:

std::copy(My_Deque.begin(), My_Deque.end(),
          std::ostream_iterator<char>(std::cout, " "));

不可否認,對於單個對象的格式化,它不會有太大的區別,但在分段數據結構上使用算法可以產生重大影響! 在處理整個范圍時,單獨處理段時可以進行有趣的優化。 例如,如果你有一個大的std::deque<char>你想逐字寫入一個文件,比如

std::copy(deque.begin(), deque.end(), std::ostreambuf_iterator<char>(out));

這是從一個分段數據結構復制到另一個分段數據結構(在引擎流緩沖區下使用字符緩沖區成為它們的段)可以花費更少的時間(取決於數據可以寫入目標的速度,雖然)。

該標准規定deque應在恆定時間內支持隨機訪問。 所以是的, [i]應該相當快。

但是,我認為,使用迭代器仍然是一個優勢。 它(理論上至少)可以是更快的常數倍(或者可能更慢!)。 無論如何,每次使用[i]都會涉及查找一些表格和計算偏移量等等。 我認為deque :: iterator的operator++不僅僅是“找到我的偏移量;向它添加1;用新的偏移量查找”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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