/*
* File: main45.cpp
* Author: Vicky.H
* Email: eclipser@163.com
*/
#include <iostream>
#include <string.h>
#include <algorithm>
void f1(int& i) {i *= 2;}
void f2(int& i) {std::cout << i << std::endl;}
/*
*
*/
int main(void) {
int a[] = {1, 2, 3, 4, 5};
int arr[5] = {0};
memcpy(arr, a, sizeof (a));
// 传统方式:
for (int* p = arr; p < arr + sizeof (arr) / sizeof (int); ++p) {
*p *= 2;
}
for (int* p = arr; p < arr + sizeof (arr) / sizeof (int); ++p) {
std::cout << *p << std::endl;
}
std::cout << "\n---------------------------" << std::endl;
memcpy(arr, a, sizeof (a));
// stl
std::for_each(arr, arr + sizeof (arr) / sizeof (int), f1);
std::for_each(arr, arr + sizeof (arr) / sizeof (int), f2);
std::cout << "\n---------------------------" << std::endl;
// C++11
memcpy(arr, a, sizeof (a));
for (auto & i : arr) {
i *= 2;
}
for (auto & i : arr) {
std::cout << i << std::endl;
}
return 0;
}
2
4
6
8
10
---------------------------
2
4
6
8
10
---------------------------
2
4
6
8
10
一般情况下,stl标准容器string,list,set,map,vector,deque,queue,array都可以使用这种遍历方式,用户自定义的数组,在明确长度的情况下也可以使用。
但:
/*
* File: main46.cpp
* Author: Vicky.H
* Email: eclipser@163.com
*/
#include <iostream>
void print(int arr[]) {
for (auto & i : arr) {
std::cout << i << std::endl;
}
}
/*
*
*/
int main(void) {
int arr[] = {1, 2, 3, 4, 5};
print(arr);
return 0;
}
是错误的。