c++第四章 数组,vector与字符串
- 利用声明引用来使数组避免隐式转换
int a[3] = {1, 2, 3}; // int[3]
auto& b = a; //int(&)[3]
- 不要使用extern指针来声明数组,会造成Unknown Bounded Array声明
extern int[];//Unknown Bounded Array声明
extern int[4];//可以
- std::begin()/std::end()// int *
- std::cbegin()/std::cend()// const int *
int a[3] = {1, 2, 3};
std::cout << a << ' ' << &(a[0]) << ' ' << std::begin(a) << std::endl;
std::cout << a+3 << ' ' << &(a[3]) << ' ' << std::endl(a) << std::endl;
- 指针算数
- 指向相同数组的指针可以比较大小,指向不同数组的指针不建议比较大小
int a[3] = {1, 2, 3};
auto ptr = a;
auto ptr2 = a + 3;
std::cout << (ptr == ptr2) << '\n';
std::cout << (ptr != ptr2) << '\n';
std::cout << (ptr < ptr2) << '\n';
std::cout << (ptr > ptr2) << '\n';
std::cout << (ptr <= ptr2) << '\n';
std::cout << (ptr >= ptr2) << '\n';
- 指针求距离
int a[3] = {1, 2, 3};
auto ptr = a;
auto ptr2 = a + 3;
std::cout << (ptr - ptr2) << '\n';
std::cout << (ptr2 - ptr) << '\n';
-
其他操作
-
求数组大小
int a[15];
std::cout << sizeof(a) / sizeof(int) << std::endl;//c语言的函数
std::cout << std::size(a) / std::size(int) << std::endl;//c++std的函数
std::cout << std::cbegin(a) / std::cend(int) << std::endl;//c++的函数
- 遍历数组
int a[15] = {2, 3 ,5 ,7};
auto ptr = std::cbegin(a);
while(ptr != std::cend(a)) //end()/cend()指向末尾元素的下一个位置
{
std::cout << * ptr << std::endl;
ptr = ptr + 1;
}
for(int x : a)
{
std::cout << x << std::endl;
}
- c字符串
#include <cstring>
char str[] = "hello";
auto ptr = str;
std::cout << strlen(str) << std::endl;
- 多维数组