我想用C++ std::vector
輸入迭代器的構造函數建立連續整數的一個這樣的數組:是std :: vector(InputIterator第一次,InputIterator最後一次)的線性時間複雜度?
std::vector<unsigned> indexes(boost::counting_iterator<unsigned>(0U),
boost::counting_iterator<unsigned>(10000U));
不過,我想知道是否有時間成正比的迭代器之間的距離的複雜性或者是否由於反覆調整大小以增加矢量而可能具有額外的對數分量?換句話說,構造函數是否查看兩個迭代器之間的距離?由於構造函數的參數不是隨機訪問迭代器,我不確定可以計算距離嗎?
如果它會反覆調整,有沒有比這更好的解決辦法,以避免:
std::vector<unsigned> indexes;
indexes.reserve(10000U);
for (unsigned idx = 0; idx < 10000U; ++idx) {
indexes.push_back(idx);
}
至少在[libC++](http://libcxx.llvm.org/)實現中,使用了「std :: distance」(如果迭代器是ForwardIterator或更好)並且只執行一次分配。對於隨機訪問迭代器,std :: distance是恆定的時間,否則是線性的。 – 2013-03-20 17:35:47
@JohnBartholomew'boost :: counting_iterator'是一個前向迭代器還是一個隨機訪問迭代器? – WilliamKF 2013-03-20 17:42:23
@JohnBartholomew:你說的很對,謝謝指出。答案已展開。 – NPE 2013-03-20 17:44:26