c++primer 9.23-9.34

9.23
都是容器内唯一的那个元素

9.24

int main(){
    cout<<*vec9_24.begin();//运行异常,程序到此截断
    cout<<vec9_24.front();//运行异常,程序到此截断
    cout<<vec9_24[1]<<endl;//运行异常,程序到此截断
    vec9_24.at(1);//显示out_of_range异常
    return 0;
}

9.25
erase的两个迭代器参数相同什么都不会发生
erase的两个参数后一个为尾后迭代器则会从第一个迭代器一直删除到容器最后
9.26

int main()
{
int ia[]={0,1,1,2,3,5,8,13,21,55,89};
    vector<int> vec9_26;
    for(int i=0;i<sizeof(ia)/sizeof(ia[0]);i++)
        vec9_26.push_back(ia[i]);
    list<int> list9_26(vec9_26.begin(),vec9_26.end());

    cout<<"list容器内容:"<<endl;
    for(auto iter=list9_26.begin();iter!=list9_26.end();iter++){
        cout<<*iter<<" ";
    }
    cout<<endl;
    cout<<"list容器删除奇数后:"<<endl;
    for(auto iter=list9_26.begin();iter!=list9_26.end();iter++){
        if((*iter)%2==1){
                iter=list9_26.erase(iter);
        }
    }
    for(auto iter=list9_26.begin();iter!=list9_26.end();iter++){
        cout<<*iter<<" ";
    }
    cout<<endl;


    cout<<"vector容器内容:"<<endl;;
    for(auto iter=vec9_26.begin();iter!=vec9_26.end();iter++){
        cout<<*iter<<" ";
    }
    cout<<endl;
    cout<<"vec容器删除奇数后:"<<endl;
    for(auto iter=vec9_26.begin();iter!=vec9_26.end();iter++){
        if((*iter)%2==0){
                iter=vec9_26.erase(iter);
        }
    }
    for(auto iter=vec9_26.begin();iter!=vec9_26.end();iter++){
        cout<<*iter<<" ";
    }
    cout<<endl;
    return 0;

9.27

int main()
{
    // 基本与书上实例雷同
    forward_list<int> flst = {0,1,2,3,4,6,5,7,8,9};
    auto prev = flst.before_begin();
    auto curr = flst.begin();
    while(curr != flst.end()){
        if(*curr%2==1){
            curr=flst.erase_after(prev);
        }else{
            prev = curr;
            curr++;
        }
    }
    for(auto iter=flst.begin();iter!=flst.end();iter++){
        cout<<*iter<<" ";
    }

9.28

#include <iostream>
#include<vector>
#include<list>
#include<string>
#include<deque>
#include<forward_list>
#include<array>
#include<fstream>
using namespace std;
/**
*9.29练习题
*注意元素插入位置
*/
void find_insert(forward_list<string> &flst,string& str1,string &str2){
    auto prev=flst.before_begin();
    auto curr= flst.begin();
    while(curr!=flst.end()){
        if(*curr==str1){
            flst.insert_after(curr,str2);
            return;
        }
        //一定要用prev做参数,因为循环到最后的时候curr已经是尾后迭代器了,不能再尾后迭代器后插入元素
        flst.insert_after(prev,str2);
        prev=curr;
        curr++;
    }
}
int main()
{
    forward_list<string> flast = {"wqe","asda","xxx","weds"};
    string str1="xxx",str2="ssss";
    find_insert(flast,str1,str2);
    for(auto iter=flast.begin();iter!=flast.end();iter++){
        cout<<*iter<<" ";
    }
    return 0;
}

9.29
在vec末尾添加75个值为0的元素
在vec末尾删除90个元素
9.30
若是内部数据类型添加的元素会初始化,若是外部数据类型必须要有默认的构造函数
9.31

int main(){
    //9.31
    list<int> li = {0,1,2,3,4,5,6,7,8,9};
    auto iter9_31 = li.begin();
    while(iter9_31!=li.end()){
        if(*iter9_31%2){
            iter9_31 = li.insert(iter9_31,*iter9_31);
            iter9_31++;
            iter9_31++; //向后移动迭代器,使其跳过复制的元素
        }
        else{
            iter9_31 = li.erase(iter9_31);//删除偶数元素
        }
    }
    //9.31单链表forward_list中删除元素时候需要两个迭代器
    forward_list<int > flist = {0,1,2,3,4,5,6,7,8,9};
    auto prev=flist.before_begin();
    auto curr=flist.begin();
    while(curr!=flist.end()){
        if(*curr%2){
            prev=curr;curr++;
            prev=curr;curr++;
        }else{
            prev=flist.erase_after(prev);
        }
    }
}

9.32
iter++这个参数要改成(iter)++
9.33
将insert值赋予begin的时候 容器内的begin迭代器有效,不这样做的话迭代器只用第一次之后就失效了,

#include<vector>
#include<forward_list>
using namespace std;
int main()
{
    vector<int> vec9_33= {1,2,3,4};
    auto begin = vec9_33.begin();
    while(begin!=vec9_33.end())
    {
        ++begin;
        begin=vec9_33.insert(begin,42);
        ++begin;
    }
    for (auto i : vec9_33)
        cout << i << " ";
    return 0;
}

9.34

int main()
{
    vector<int> vec9_34= {1,2,3,4,5,6,47,8,89};
    int i=1;
    auto iter = vec9_34.begin();
    while(iter!=vec9_34.end())
    {
        if(*iter%2==1){
            iter=vec9_34.insert(iter,*iter);
            cout<<i++<<endl;
        }
        iter++;
    }
    for (auto i : vec9_34)
        cout << i << " ";
    return 0;
}

通过观察控制台的i输出会发现程序无限循环,原因在于插入元素的时候没有将迭代器后移导致
要在if中加上一行

if(*iter%2==1){
            iter=vec9_34.insert(iter,*iter);
            iter++;//这是加上的一行
            cout<<i++<<endl;
        }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容

  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,104评论 1 45
  • 喜欢这样的状态,静听夜雨敲打窗台,看着书,听着你时断时续的琴声,心底里泛起满满的幸福感。 今日看到一段话,...
    婷Amy阅读 151评论 0 0
  • 谷雨,春天里的最后一个节气。谷雨谷雨,种谷下雨,意味着该播种了,雨水也多了! 农谚说:“谷雨前后,点瓜种豆。”觉得...
    凉月西风阅读 630评论 0 2
  • 一:学生共性需要: 学生普遍反映需要被关注; 需要老师改一改他现在自己独立做的试题; 需要答题模板和答题技巧; 需...
    子非鱼lily阅读 301评论 0 3
  • 破阵子·为陈同甫赋壮词以寄 醉里挑灯看剑,梦回吹角连营。八百里分麾下炙,五十弦翻塞外声。沙场秋点...
    爱跳高de公山笛韵阅读 311评论 0 0