C和C++中用变量定义数组并赋初值
下面写的仅仅是个人的一点总结,因为水平有限,如果有什么错误欢迎大家批评指正,不胜感激。
- 在C和C++中,如果使用变量声明数组大小,尽量不要同时进行初始化,通常会编译错误,因此,我觉得最好还是先声明,再赋值;
- 在c中,可以这样声明:
int arr[length];
或者是使用vector来声明:vector <int> array(length);
来声明;或者使用malloc函数:int* p = (int *) malloc ( sizeof(int) * length );
使用vector和malloc时不要忘了加相应的头文件。 - 在c++中,可以使用vector方法,也可以使用malloc方法;还可以使用new:
int *arr = new int[lenrth];
- 在c中,可以这样声明:
- 对于赋值操作而言,
- C中,可以使用变量声明数组的大小,但不能同时进行初始化,像下边的代码这样,在编译时就会出现错误:
int arr[length] = {0};
- 在不考虑消耗的情况下,可以使用循环来为其赋初值
- 也可以使用memset函数来进行初始化,格式为:
memset(数组名,初值,sizeof(数组名));
,这里初值建议设置为0或者-1,原因与0、-1和其他数值在计算机中的编码有关;此时头文件中要加上<string.h>;
- C中,可以使用变量声明数组的大小,但不能同时进行初始化,像下边的代码这样,在编译时就会出现错误:
下面关于vector的操作是从几位前辈的博客中学到的:
1、关于一维vector的一些使用说明:
- 创建一维vector:
vector<int> nums;//不指定长度
vector<int> nums(length); // 指定长度为n
- 添加元素:
nums.push_back(1);//直接从数组末端添加
nums[i] = 1;//直接赋值给第i个位置
- 删除元素:
nums.resize(nums.size-i); //直接将数组长度减小,某种方式上删掉了后面i个
nums.pop_back();//删掉最后一个元素
- 遍历:
for(int i = 0; i < nums.size(); i++){
cout<<nums[i]<<endl;
}
- 其他的操作:
获得长度:nums.size()
排序(O(nlogn)):sort(nums.begin(),nums.end());
翻转:reverse(nums.begin(), nums.end());
//合并两个vector:合并nums1和nums2,并将合并后的数组赋值给nums
vector<int> nums1(m),nums2(n);
vector<int> nums;
nums.resize(m+n);
merge(nums1.begin(), nums1.end(),nums2.begin(),nums2.end(),nums);
2、二维vector的一些说明:
- 定义:
vector<vector <int> > nums(m ,vector<int>(n)); //m*n的二维vector
//定义了一个vector容器,元素类型为vector<int>,初始化为包含m个vector<int>对象,每个对象都是一个新创立的vector<int>对象的拷贝,而这个新创立的vector<int>对象被初始化为包含n个0。
//vector<int>(n)表示构造一个无名且含n个0的vector<int>对象。
- 初始化二维数组
vector<vector <int> > nums(m ,vector<int>(n,0)); //m*n的二维vector,所有元素为0
vector<string> mat(numRows,string(colNum,0));
- 获取行数和列数:
获得二维数组的行数:nums.size();
获得二维数组的列数:nums[0].size()
- 遍历:
int m = nums.size(),n = nums[0].size();
for(int i = 0; i < m; i++){
for(int j = 0; j < n; j++){
cout<<nums[i][j]<<endl;
}
}
//(1)头文件#include<vector>.
//(2)创建vector对象,vector<int> vec;
//(3)尾部插入数字:vec.push_back(a);
//(4)使用下标访问元素,cout<<vec[0]<<endl;记住下标是从0开始的。
//(5)使用迭代器访问元素.
vector<int>::iterator it;
for(it=vec.begin();it!=vec.end();it++)
cout<<*it<<endl;</span>
//(6)插入元素: vec.insert(vec.begin()+i,a);在第i个元素后面插入a;
//(7)删除元素: vec.erase(vec.begin()+2);删除第3个元素
// vec.erase(vec.begin()+i,vec.end()+j);删除区间[i,j-1];区间//从0开始
//(8)向量大小:vec.size();
//(9)清空:vec.clear() //清空之后,vec.size()为0