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

9.11
    vector<int > vec = { 1,2,3 };//元素为1,2,3
    vector<int > vec{10}; //元素为10个0
    vector<int > vec(10,1);//元素为10个1
    vector<int > vec(vec1); // 元素为vec1的元素
    vector<int > vec(vec1.bengin(), vec1.end()); // 元素为vec1的元素
    vector<int > vec(vec1.bengin(), vec1.end()/2); // 元素为vec1的开始到一半的那个元素

9.12

创建其拷贝的构造函数,拷贝的是整个整体,而迭代器拷贝的是一个区间

9.13

    list<int > testList= { 1,2,3 };
    vector<int > testVector(testList.begin(), testList.end());

两段拷贝都能用迭代器拷贝执行,只要满足元素类型相同或者可以隐式转换即可,容器类型可以忽略

9.14

    list<char* > testList = { "a","b", "c" };
    vector<string > testVec(testList.begin(),testList.end());
9.15
    vector<int > testVec_0 = { 1,2,3,4,5 };
    vector<int > testVec_1 = { 1,2,3 };
    cout << (testVec_0 < testVec_1) <<endl;
9.16
    vector<int > testVec_0 = { 1,2,3,4,5 };
    list<int > testList_0 = { 1,2,3 };
    vector<int > testVec_1(testList_0.begin(), testList_0.end());

不能直接比较,所以将其中一个容器转换成另一种容器类型

9.17

c1和c2必须相同容器元素,元素必须定义了相应的比较运算符

9.18

int main() {
    string str;
    deque<string > tmpDeque;
    while (cin >> str)
    {
        tmpDeque.push_back(str);
    }
    for(deque<string >::iterator it = tmpDeque.begin(); it != tmpDeque.end();it++){
        cout << *it << endl;
    }
    for (;;);
    return 0;
}

9.19

int main() {
    string str;
    list<string > tmpDeque;
    while (cin >> str)
    {
        tmpDeque.push_back(str);
    }
    for(list<string >::iterator it = tmpDeque.begin(); it != tmpDeque.end();it++){
        cout << *it << endl;
    }
    for (;;);
    return 0;
}

9.20

int main() {
    list<int > listInt;
    deque<int > dequeEven;
    deque<int > dequeOdd;
    for (list<int >::iterator it = listInt.begin(); it != listInt.end(); it++) {
        if(*it % 2){
            dequeEven.push_back(*it);
        }else{
            dequeOdd.push_back(*it);
        }
    }

    for (;;);
    return 0;
}

9.21

插入到vec指定的位置上,之后的元素整体往后瞬移插入元素大小位置,所以会很慢

9.22

指针没有进行变址操作,iter始终指向同一个地方

在while循环处增加iter++;

成功插入元素后iter应该重新指向,当前的iter会失效

9.23:

均为那唯一元素的值

9.24

[],front会直接报错

at会抛出异常

begin正常运行,但访问地址会报错

9.25

elem1和elem2关系是 删除 大于等于elem1的元素和小于elem2的元素,闭开区间

所以如果相等,则删除elem1指定的那个元素

如果都是尾后迭代器,则不发生任何事

如果elem2是尾后迭代器,则会删除elem1之后的所有元素

9.26

int main() {
    int ia[] = {0,1,1,2,3,5,8,13,21,55,89};
    vector<int > intVec;
    list<int > intlist;
    auto beginIt = begin(ia);
    auto endIt = end(ia);
    for(; beginIt != endIt; beginIt++){
        intVec.push_back(*beginIt);
        intlist.push_back(*beginIt);
    }
    for (vector<int >::iterator it = intVec.begin(); it != intVec.end(); ) {
        if(*it % 2 == 0){
            intVec.erase(it);
        }else{
            it++;
        }
    }
    for (list<int >::iterator it = intlist.begin(); it != intlist.end(); ) {
        if (*it % 2) {
            intlist.erase(it);
        }
        else {
            it++;
        }
    }

    for (;;);
    return 0;
}

猜你喜欢

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