[2018年4月26号]C++ primer 课后练习 第九章 顺序容器

9.27
int main() {
    forward_list<int > flist= {1,2,3,4,5,6,7,8,9};

    forward_list<int >::iterator it_after = flist.before_begin();
    forward_list<int >::iterator it = flist.begin();
    while (it != flist.end())
    {   
        if(*it%2){
            it = flist.erase_after(it_after);
        }else{
            ++it_after;
            ++it;
        }
    }
    for(auto showVa : flist){
        cout<<showVa << endl;
    }
    for (;;);
    return 0;
}

9.28

void insertForwardList(forward_list<string >& fstr, const string& str_0, const string& str_1){
    forward_list<string >::iterator it_after = fstr.before_begin();
    forward_list<string >::iterator it = fstr.begin();
    while (it != fstr.end())
    {
        if(*it == str_0){
            fstr.insert_after(it, str_1);
            return;
        }
        it++;
        it_after++;
    }
    fstr.insert_after(it_after, str_1);
}

9.29

vec尾部插入75个初始元素

删除尾部的90个元素

9.30

元素要有默认构造函数,或者需要给定一个初始变量,否则无法通过编译并且报错

9.31

list和forward_list没有定义一次跳过多个迭代器的+=操作

int main() {
    list<int > list = {0,1,2,3,4,5,6,7,8,9};
    auto iter = list.begin();
    while(iter != list.end()){
        if(*iter %2){
            iter = list.insert(iter,*iter);
            iter++;
            iter++;
        }else{
            iter = list.erase(iter);
        }
    }
    for (;;);
    return 0;
}

9.32

不合法,当前操作插入的是迭代器所指的数再加一的值,与原程序需求不符

9.33

在第一次插入后,iter会失效,再次插入时候会报错

9.34

在遇到第一个奇数时候,插入当前奇数,但是后续指跳过一个迭代器,所以会一直循环在第一个奇数出现的地方插入奇数

9.35

capacity 为 当前预分配的最大的数量

size为当前元素的数量

9.36

capacity 永远大于等于size的数量

9.37

因为list和array不是分配在连续的内存中,是分散存储的,需要添加元素再进行内存分配指定

9.38:略

9.39

预分配1024个大小的vec,随用户输入元素,输入完成后将vector当前大小重新分配成输入数量的1.5倍



猜你喜欢

转载自blog.csdn.net/qq_22478401/article/details/80088929
今日推荐