ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

一维,二维,三维数组,vector 初始化

2019-08-10 13:57:58  阅读:370  来源: 互联网

标签:初始化 myvector int vector 84 一维 dp


1. 用memset初始化数组:

1)按照字节赋值

2)头文件在<cstring>中

注:由于memset函数是按照字节赋值的,所以对int型数组用该函数时,只能是0或-1,否则会出错,这里,不管数组是多少维的,语法均为:

    int dp[84][84][84][2];
    memset(dp, 0, sizeof(dp)); //只能赋值0或-1

2.  fill 初始化vector和数组:

1)按照变量类型单元赋值,将区间 [first, end) 中的每个单元都赋为同一个值。

2)头文件在<algorithm>中

// fill algorithm example
#include <iostream>     // std::cout
#include <algorithm>    // std::fill
#include <vector>       // std::vector
 
int main () {
  std::vector<int> myvector (8);                       // myvector: 0 0 0 0 0 0 0 0
 
  std::fill (myvector.begin(),myvector.begin()+4,5);   // myvector: 5 5 5 5 0 0 0 0
  std::fill (myvector.begin()+3,myvector.end()-2,8);   // myvector: 5 5 5 8 8 8 0 0
 
  std::cout << "myvector contains:";
  for (std::vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it)
    std::cout << ' ' << *it;
  std::cout << '\n';
 
  return 0;
}

直接给一维数组赋值:

 int a[4] = {1, 1, 1, 1};
    fill(a, a+2, 284);
    // 284 284 1 1

要给多维数组赋值时,这里的区间[first, end)都是指针地址,并且是一维的,由于多维数组在内存空间中连续性,可将(int ****)的变量类型dp转化为(int *)类型,得到了dp的首地址,然后按照其区间给其赋值。

参看如下赋值方法:

    int dp[84][84][84][2];
    fill((int*)dp, (int*)dp + 84 * 84 * 84 * 2, 0);

也可以这样将二维数组赋值:

    int dp[84][84];
    fill(dp[0], dp[0] + 84 * 84 , 0);

3. vector 初始化:

1) 在定义v2时初始化:以下两种方式等价 ,v2 初始化为 v1 的拷贝,两者的必须类型相同,也就是同为int的vector类型,v2将具有和v1相同的容量和元素。

vector<int> v2(v1);
vector<int> v2  = v1; 

 

2)将v1的某段复制给v2:

vector<int> v2(v1.begin()+2,v1.end());
int a[5] = {1,2,3,4,5};
//通过数组a的地址初始化,注意地址是从0到5(左闭右开区间)
vector<int> b(a, a+5);

 

3) 指定值初始化,ilist5被初始化为包含7个值为3的int

vector<int> ilist5(7,3);

4) 初始化二维vector为n行m列,值为0:

vector<vector<int>> v(n, vector<int>(m, 0));

 

 

 

标签:初始化,myvector,int,vector,84,一维,dp
来源: https://www.cnblogs.com/Bella2017/p/11331337.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有