void backinsertertest()
{
list<int> l;
back_insert_iterator<list<int>> lit(l);
*lit=1;
++lit;
*lit=2;
++lit;
for (list<int>::iterator it=l.begin();it!=l.end();++it) {
cout<<*it<<endl;
}
cout<<"---------------"<<endl;
back_inserter(l)=3;
back_inserter(l)=4;
for (list<int>::iterator it=l.begin();it!=l.end();++it) {
cout<<*it<<endl;
}
cout<<"---------------"<<endl;
copy(l.begin(), l.end(), back_inserter(l));
cout<<"---------------"<<endl;
for (list<int>::iterator it=l.begin();it!=l.end();++it) {
cout<<*it<<endl;
}
}
代碼如上
運行結果

為什么在運行時會卡在copy(l.begin(), l.end(), back_inserter(l));這行呢
uj5u.com熱心網友回復:
// ConsoleApplication4.cpp : 此檔案包含 "main" 函式。程式執行將在此處開始并結束。//
#include <iostream>
#include <list>
using namespace std;
void backinsertertest()
{
list<int> l;
list<int> l1;
back_insert_iterator<list<int>> lit(l);
*lit = 1;
++lit;
*lit = 2;
++lit;
for (list<int>::iterator it = l.begin(); it != l.end(); ++it) {
cout << *it << endl;
}
cout << "---------------" << endl;
back_inserter(l) = 3;
back_inserter(l) = 4;
for (list<int>::iterator it = l.begin(); it != l.end(); ++it) {
cout << *it << endl;
}
cout << "---------------" << endl;
copy(l.begin(), l.end(), back_inserter(l1));
cout << "---------------" << endl;
for (list<int>::iterator it = l1.begin(); it != l1.end(); ++it) {
cout << *it << endl;
}
}
int main()
{
backinsertertest();
return 0;
}
uj5u.com熱心網友回復:
還有這兒copy(l.begin(), l.end(), back_inserter(l1));uj5u.com熱心網友回復:
那可能要看看copy的原始碼是怎么實作了,估計是不斷的往l后面拷貝,l迭代就一直走不到l.end,死回圈了。uj5u.com熱心網友回復:
這個我也試了,確實拷貝到別的list物件中就可以,但是我用front_inserter時,就沒有這個問題,C++標準庫真是個神奇的東西
uj5u.com熱心網友回復:
但是為啥我用front_inserter時,就沒有這個問題,不會卡住呢
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/8168.html
標籤:C++ 語言
下一篇:vim+ycm(YouCompleteMe),手把手教你配置C++開發工具,支持基于語議的自動補全和第三方庫補全(史上最簡單、史上最透徹、史上最全的終極解決方案
