第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

這個(gè)程序編譯倒是能通過(guò) 可運(yùn)行時(shí)會(huì)顯示錯(cuò)誤 ,怎么整?

這個(gè)程序編譯倒是能通過(guò) 可運(yùn)行時(shí)會(huì)顯示錯(cuò)誤 ,怎么整?

C++
幕布斯7119047 2023-04-22 17:14:40
請(qǐng)大家來(lái)看一下這個(gè)erase函數(shù)到底怎么用 這個(gè)程序編譯倒是能通過(guò) 可運(yùn)行時(shí)會(huì)顯示錯(cuò)誤 “嘭”一聲彈出個(gè)對(duì)話框Debug Assertion Failed!我覺(jué)得肯定是erase函數(shù)用法不對(duì) 可是找不到錯(cuò)誤在哪兒 請(qǐng)大家指導(dǎo)一下了~~~ 對(duì)了程序功能是刪除vector對(duì)象中的偶數(shù)和list對(duì)象中的奇數(shù) #include<iostream> #include<vector> #include<list> using namespace std; int main() { int ia[10]={2,3,4,5,6,7,8,9,10,11}; vector<int> ivec(ia,ia+10); //定義一個(gè)vector對(duì)象ivec vector<int>::iterator iter=ivec.begin(); list<int> lvec(ia,ia+10); //定義一個(gè)list對(duì)象lvec list<int>::iterator lter=lvec.begin(); while(iter!=ivec.end() && lter!=lvec.end()) { if(*iter%2==0) ivec.erase(iter); if(*lter%2!=0) lvec.erase(lter); ++iter; ++lter; } for(iter=ivec.begin(); iter!=ivec.end(); ++iter) cout<<*iter<<" "; cout<<endl; for(lter=lvec.begin(); lter!=lvec.end(); ++lter) cout<<*lter<<" "; cout<<endl; system("PAUSE"); return 0; }
查看完整描述

1 回答

?
慕容3067478

TA貢獻(xiàn)1773條經(jīng)驗(yàn) 獲得超3個(gè)贊

對(duì)于vector一般不要用erase(),因?yàn)楹芏嗲闆r下他要和<algorithm>中的remove()一塊用!erase()的使用會(huì)使迭代器失效如果刪除的不是最后面的元素的話。你的程序中if(*iter%2==0)
ivec.erase(iter);
可以換成:(記著加頭文件<algorithm>)
if
(*iter%2
==
0)
ivec.erase(remove(ivec.begin(),
ivec.end(),
*iter),
ivec.end())
但如果你用if
(*iter%2
!=
0)
ivec.erase(remove(ivec.begin(),
ivec.end(),
*iter),
ivec.end())
輸出結(jié)果則包含11,結(jié)果錯(cuò)誤!
不知道你為什么數(shù)組,向量,鏈表都用,為了和你一致,我也只能改成這樣:
#include
<iostream>
#include
<vector>
#include
<list>
#include
<algorithm>
#include
<functional>
#include
<iterator>
using
namespace
std;
int
main
()
{
vector<int>
ivec;
list<int>
ilis;
int
vec[]
=
{2,
3,
4,
5,
6,
7,
8,
9,
10,
11};
remove_copy_if
(vec,
vec+10,
back_inserter(ivec),
bind2nd(modulus<int>(),
2));
remove_copy_if
(vec,
vec+10,
back_inserter(ilis),
not1(bind2nd(modulus<int>(),
2)));
for
(vector<int>::const_iterator
iter
=
ivec.begin();
iter
!=
ivec.end();
++iter)
cout
<<
*iter
<<
'\t';
cout
<<
endl;
for
(list<int>::const_iterator
liter
=
ilis.begin();
liter
!=
ilis.end();
++liter)
cout
<<
*liter
<<
'\t';
cout
<<
endl;
}
最好的做法是:
#include
<iostream>
#include
<vector>
#include
<list>
#include
<algorithm>
#include
<functional>
#include
<iterator>
using
namespace
std;
int
main
()
{
vector<int>
ivec,
odd_vec,
even_vec;
for
(int
i
=
2;
i
!=
12;
++i)
ivec.push_back(i);
remove_copy_if
(ivec.begin(),
ivec.end(),
back_inserter(even_vec),
bind2nd(modulus<int>(),
2));
remove_copy_if
(ivec.begin(),
ivec.end(),
back_inserter(odd_vec),
not1(bind2nd(modulus<int>(),
2)));
copy
(even_vec.begin(),
even_vec.end(),
ostream_iterator<int>(cout,
"\t"));
cout
<<
endl;
copy
(odd_vec.begin(),
odd_vec.end(),
ostream_iterator<int>(cout,
"\t"));
cout
<<
endl;
}

查看完整回答
反對(duì) 回復(fù) 2023-04-25
  • 1 回答
  • 0 關(guān)注
  • 160 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)