数组

数组申明:type arrayname[arrarysize]  如: int student[100];  int student[100][100]; 

数据初始化:大括号 { } 之间的值的数目不能大于我们在数组声明时在方括号 [ ] 中指定的元素数目。如果没有写大小,数组的大小则为初始化时元素的个数。如:

int student[3] = {1,2,3}; 
int student[3] = {0}; //初始化为0
int student[] = {1,2,4}; //没有指定大小,编译器自动分配大小

如何把一个数组的值赋给另一个数组:一个方法就是用循环的方式一个一个赋值,另一个办法就是用 void *memcpy(void *dst, void *src, size_t size); 函数。这个函数的功能为将src上大小为size字节的数据赋值到dst上。如:

1 int a[5];
2 int b[5];
3 memeopy(a,b,sizeof(b)); //把b的值赋给a

数组作为参数:当数组作为一个函数的参数传递时,数组类型自动转换为指针类型,因此传的实际是地址。

 1 #include <iostream>
 2 using namespace std;
 3 
 4 void one(int *array); //形式参数是一个指针
 5 void two(int array[]); // 形式参数是一个未定义大小的数组
 6 void three(int array[5]); // 形式参数是一个已定义大小的数组
 7 
 8 int main()
 9 {
10     int n;
11     int array[5] = { 0 };
12     int *arr;
13     arr = array;  //也可以写成 int *arr = array;
14     one(array);
15     two(array);
16     three(array);
17     printf("数组=%d
", sizeof(array)/sizeof(int)); //得到数组array的内存所占大小
18     printf("指针=%d
", sizeof(arr));  //得到指针arr的内存所占大小
19     return 0;
20 }
21 
22 void one(int *array)
23 {
24     int one_size = 0;
25     one_size = sizeof(array);
26     printf("one_size=%d
", one_size);
27 }
28 
29 void two(int array[])
30 {
31     int two_size = 0;
32     two_size = sizeof(array);
33     printf("two_size=%d
", two_size);
34 }
35 
36 void three(int array[5])
37 {
38     int three_size = 0;
39     three_size = sizeof(array);
40     printf("three_sizs=%d
", three_size);
41 }

结果为:

1 one_size=8
2 two_size=8
3 three_sizs=8
4 数组=5
5 指针=8

上面三种方式来声明函数形式参数,这三种声明方式的结果是一样的,因为每种方式都会告诉编译器将要接收一个整型指针。

数组作为返回值:C++ 不允许返回一个完整的数组作为函数的参数。但是,可以通过指定不带索引的数组名来返回一个指向数组的指针。所以如果想要返回一个数组,必须先定义一个返回类型为指针类型的函数。另外C++不支持在函数外返回局部变量的地址,所以使用static定义局部变量(就是数组)来实现返回数组。举个栗子:

 1 #include <time.h>
 2 #include <iostream>
 3 using namespace std;
 4 
 5 
 6 int *student()   //定义一个指针类型的返回类型
 7 {
 8     srand((int)time(0));
 9     static int array[10] = { 0 };  //用static定义
10     int i;
11     for (i = 0; i<10; i++)
12     {
13         array[i] = rand() % 100;
14         printf("array[%d] = %d
", i, array[i]);
15     }
16     return array;
17 }
18 
19 int main()
20 {
21     int *p = student();   //把array的地址赋给指针p
22     int n;
23     for (int i = 0; i < 10; i++)
24     {
25         cout << "*(p + " << i << ") : ";
26         cout << *(p + i) << endl;   //打印出指针所指地址的值
27     }
28     return 0;
29 }

Vector(向量): C++ 中的一种数据结构,确切的说是一个类。它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的。

1.文件包含:

首先在程序开头处加上 #include<vector> 以包含所需要的类文件 vector

还有一定要加上 using namespace std;

2.变量声明:

2.1 例: 声明一个 int 向量以替代一维的数组: vector <int> a; (等于声明了一个 int 数组 a[],大小没有指定,可以动态的向里面添加删除)。

2.2 例: 用 vector 代替二维数组.其实只要声明一个一维数组向量即可,而一个数组的名字其实代表的是它的首地址,所以只要声明一个地址的向量即可,即: vector <int *> a 。同理想用向量代替三维数组也是一样,vector <int**>a; 再往上面依此类推。

3.具体的用法以及函数调用:

3.1 得到向量中的元素和数组一样,例如:

 1 vector <int *> a
 2 int b = 5;
 3 a.push_back(b);  //push_back(b)在数组最后添加数据
 4 cout<<a[0];        //输出结果为5
 5 /*使用数组给向量赋值:
 6 vector<int> v( a, a+sizeof(a)/sizeof(a[0]) );
 7 或者:
 8 int a[]={1,2,3,4,5,6,7,8,9};
 9 typedef vector<int> vec_int;
10 vec_int vecArray(a,a+9);*/
更多向量内容可以查看:C++ vector 容器浅析
常用函数:
  • strcpy(s1, s2) -- 复制字符串 s2 到字符串 s1。
  • strcat(s1, s2) -- 连接字符串 s2 到字符串 s1 的末尾。
  • strlen(s1) -- 返回字符串 s1 的长度。
  • strcmp(s1, s2) -- 如果 s1 和 s2 是相同的,则返回 0;如果 s1<s2 则返回值小于 0;如果 s1>s2 则返回值大于 0。
  • strchr(s1, ch) -- 返回一个指针,指向字符串 s1 中字符 ch 的第一次出现的位置。
  • strstr(s1, s2) -- 返回一个指针,指向字符串 s1 中字符串 s2 的第一次出现的位置。
  •  append() -- 在字符串的末尾添加字符
  •  find() -- 在字符串中查找字符串
  •  insert() -- 插入字符
  •  length() -- 返回字符串的长度
  •  replace() -- 替换字符串
  •  substr() -- 返回某个子字符串 
原文地址:https://www.cnblogs.com/xiaodangxiansheng/p/10901810.html