簡體   English   中英

帶列表的std :: generate_n函數

[英]std::generate_n function with list

我正在制作一個使用std::generate_n函數的程序 我可以使它與數組一起正常工作,但我無法弄清楚如何使它與列表容器一起工作。 這是我有的:

#include <iostream>
#include <algorithm>
#include <list>
using namespace std;

int current = 0;
int UniqueNumber () { return ++current; }

int main ()
{
    list<int> L;
    list<int>::iterator it;

    generate_n (L.begin(), 9, UniqueNumber);

    cout << "list contains:";
    for (it=L.begin(); it!=L.end(); ++it)
    cout << ' ' << *it << '\n';

    return 0;
}

輸出只顯示“list contains:”,之后沒有任何內容。 我知道我的輸出循環正常工作,因為我用insert()方法手動嘗試,所以問題是generate_n函數。 我想我錯誤地傳遞了這些論點。 誰知道我做了什么?

您想使用insert-iterator將項添加到列表中:

generate_n (back_inserter(L), 9, UniqueNumber);

一定要#include <iterator>來使用它。 另一種可能性是使用std::iota

list<int> L(10);
std::iota(L.begin(), L.end(), 1);

哦,要顯示列表的內容,您可能需要:

std::copy(L.begin(), L.end(), ostream_iterator<int>(std::cout, "\n"));

或(在C ++ 11中):

for (auto i : L)
    std::cout << ' ' << i << '\n';

generate_ninsert ,只是取消引用和分配。

請參閱以下可能的generate_n實現(從此處復制):

template< class OutputIt, class Size, class Generator >
OutputIt generate_n( OutputIt first, Size count, Generator g )
{
    for( Size i = 0; i < count; i++ ) {
        *first++ = g();
    }
    return first;
}

因此,在調用之前,您需要確保列表的大小合適。

所以,改變:

list<int> L;

至:

list<int> L(9);

暫無
暫無

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

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