c++第十八天

p105~p108:

1、迭代器与数组的不同:迭代器的索引值必须是无符号类型,数组的索引无此要求。

 

2、使用数组的时候编译器一般会把它转化为指针。

 

3、auto ia2(数组名);的结果是:获得一个指向ia的第一个元素的指针。

 

4、decltype(数组名) ia3;的结果是:获得一个数组。

 

5、指针与迭代器类似,两个指针相减(参与运算的指针必须是指向用一数组)的结果是一种名为有符号 ptrdiff_t的标准库类型。

 

6、标准库函数 begin和 end。示例:

#include<iterator>
using std::begin;
using std::end;
for (int *b = begin(arr); b != end(arr); ++b) {
    cout << *b << endl;
}

 

7、只要指针指向的是数组中的元素,都可以执行下表运算。例如:int *p = &ia[2];则 p[0]等价于ia[2],p[k]等价于 *(p+k)。

 

8、遍历数组的几种方式。


(***)

 

遇到的问题

1、+=的优先级比 - 的低。p1 += p2 - p1; 等价于 p1 = p1 + (p2 - p1);
验证方法:(p1 += p2) - p1;非法。指针不能够相加。

 

练习 3.34

功能:将p2的值赋给p1

当p1是const point时,该操作是非法的。

 

练习 3.35

#include<iostream>
using std::cout;
using std::endl;
int main()
{
    int arr[10];
    int *e = &arr[10];
    for (int *b = arr; b != e; ++b) {
        *b = 0;
    }
    // 验证
    for (int x: arr) {
        cout << x << endl;
    }
    return 0;
}

 

练习3.36

1

#include<iostream>
using std::cout;
using std::endl;
#include<iterator>
using std::begin;
using std::end;
int main()
{
    // 默认相同类型
    int arr1[10];
    int arr2[7];
    
    // 比较索引范围
    int size_arr1 = end(arr1) - begin(arr1);
    int size_arr2 = end(arr2) - begin(arr2);
    if (size_arr1 != size_arr2) {
        cout << "Differen. " << endl;
        return 0;
    }
    // 比较数组内容
    for (int i = 0; i != size_arr1; ++i) {
        if (arr1[i] != arr2[i]) {
            cout << "Different. " << endl;
            return 0;
        }
    }
    cout << "Same arr. " << endl;
    return 0;
}

 2

#include<iostream>
using std::cout;
using std::endl;
#include<vector>
using std::vector;
int main()
{
    vector<int> ivec{1, 2, 3};
    vector<int> ivec2{1, 2, 3};
    if (ivec == ivec2) {
        cout << "Same vector. " << endl;
    } else {
        cout << "Different. " << endl;
    }
    return 0;
}

 

posted @ 2017-02-19 09:42  xkfx  阅读(163)  评论(0编辑  收藏  举报