[英]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_n
不insert
,只是取消引用和分配。
請參閱以下可能的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.