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

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

我正在做撲克算法,如何用迭代器完成刪除連續(xù)4個(gè)相同元素呢?請(qǐng)多多指教

我正在做撲克算法,如何用迭代器完成刪除連續(xù)4個(gè)相同元素呢?請(qǐng)多多指教

翻閱古今 2023-04-22 18:14:51
void deal_value(vector<int> &dealv){for(vector<int>::size_type i=0;i<10;i++){if(dealv[i]==dealv[i+3]){cout<<"dealv[i]:"<<dealv[i]<<endl;remove(dealv.begin(),dealv.end(),dealv[i]);}}}結(jié)過出現(xiàn)錯(cuò)誤:測(cè)試值:1 2 1 2 3 3 3 3 4 4dealv[i]:3結(jié)過:1 2 1 2 4 3 3 3 4 4第6位結(jié)果不正確。
查看完整描述

2 回答

?
九州編程

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

remove不正確是因?yàn)槟銈魅氲牡谌齻€(gè)參數(shù)是接受變動(dòng)的容器內(nèi)部的數(shù),這樣按引用傳遞進(jìn)來的第三個(gè)參數(shù)會(huì)在算法執(zhí)行的過程中收到影響。

remove(dealv.begin(),dealv.end(),dealv[i]);
改為:
int d=dealv[i];
remove(dealv.begin(),dealv.end(),d);
即可。
或者簡(jiǎn)單點(diǎn),直接將dealv[i]轉(zhuǎn)換成右值:
remove(dealv.begin(),dealv.end(),(int)dealv[i]);

為什么會(huì)這樣,其實(shí)本質(zhì)上是當(dāng)remove在刪除內(nèi)部元素的時(shí)候,你的dealv[i]的值不知不覺產(chǎn)生了改變。

查看完整回答
反對(duì) 回復(fù) 2023-04-25
?
海綿寶寶撒

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

我寫的模板函數(shù)接受3個(gè)參數(shù),前兩個(gè)參數(shù)定義要搜索的區(qū)間,第三個(gè)參數(shù)決定連續(xù)多少個(gè)相同的元素,返回值是找到的第一個(gè)連續(xù)4個(gè)相同元素的起始位置和終止位置的迭代器,這兩個(gè)迭代器組成一個(gè)pair對(duì)象。(根據(jù)stl慣例,這兩個(gè)迭代器定義的區(qū)間是左閉右開的)把這兩個(gè)迭代器送給erase函數(shù)做參數(shù),就可以刪除想刪除的元素。示例如下:
===================================================
#include <iostream>
using std::cout;
using std::endl;

#include <vector>
using std::vector;

using std::pair;

template <typename InputIterator>
std::pair<InputIterator, InputIterator>
find_equal_sequence(InputIterator first, InputIterator last, int n) {
if (first != last) {
InputIterator cur(first), start(cur++);
for (int c = 1; cur != last; ++cur) {
if (*cur == *start) {
if (++c == n)
return std::make_pair(start, ++cur);
} else {
start = cur;
c = 1;
}
}

}
return std::make_pair(last, last);
}

int main() {
int array[] = { 1, 2, 1, 2, 3, 3, 3, 3, 4, 4, };
vector<int> v(array, array+10);

for (vector<int>::iterator i = v.begin(); i != v.end(); ++i)
cout << *i << " ";
cout << endl;

typedef vector<int>::iterator vi;
pair<vi, vi> range = find_equal_sequence(v.begin(), v.end(), 4);
v.erase(range.first, range.second);

for (vector<int>::iterator i = v.begin(); i != v.end(); ++i)
cout << *i << " ";
cout << endl;

return 0;
}



查看完整回答
反對(duì) 回復(fù) 2023-04-25
  • 2 回答
  • 0 關(guān)注
  • 220 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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