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[];
int *e = &arr[];
for (int *b = arr; b != e; ++b) {
*b = ;
}
// 验证
for (int x: arr) {
cout << x << endl;
}
return ;
}
练习3.36
1
#include<iostream>
using std::cout;
using std::endl;
#include<iterator>
using std::begin;
using std::end;
int main()
{
// 默认相同类型
int arr1[];
int arr2[]; // 比较索引范围
int size_arr1 = end(arr1) - begin(arr1);
int size_arr2 = end(arr2) - begin(arr2);
if (size_arr1 != size_arr2) {
cout << "Differen. " << endl;
return ;
}
// 比较数组内容
for (int i = ; i != size_arr1; ++i) {
if (arr1[i] != arr2[i]) {
cout << "Different. " << endl;
return ;
}
}
cout << "Same arr. " << endl;
return ;
}
2
#include<iostream>
using std::cout;
using std::endl;
#include<vector>
using std::vector;
int main()
{
vector<int> ivec{, , };
vector<int> ivec2{, , };
if (ivec == ivec2) {
cout << "Same vector. " << endl;
} else {
cout << "Different. " << endl;
}
return ;
}