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; }