C和C++中用变量定义数组并赋初值,以及vector的相关操作

C和C++中用变量定义数组并赋初值

  下面写的仅仅是个人的一点总结,因为水平有限,如果有什么错误欢迎大家批评指正,不胜感激。

  1. 在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];
  2. 对于赋值操作而言,
    • C中,可以使用变量声明数组的大小,但不能同时进行初始化,像下边的代码这样,在编译时就会出现错误:int arr[length] = {0};
    • 在不考虑消耗的情况下,可以使用循环来为其赋初值
    • 也可以使用memset函数来进行初始化,格式为:memset(数组名,初值,sizeof(数组名));,这里初值建议设置为0或者-1,原因与0、-1和其他数值在计算机中的编码有关;此时头文件中要加上<string.h>;

下面关于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

  • 2
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值