当前位置:   article > 正文

结构体vector容器的使用以及结构体容器的初始化_c++结构体中使用容器 问题

c++结构体中使用容器 问题

前言:

协助老师设计算法的时候,利用数组作为预存储没能很好的处理数据量的问题,存在部分比较大的包,无法正常运行;

主要是二维数组开辟的空间小且没能利用好,然后改成了一维结构体数组,发现占用的空间更大;

完整的测试用例

  1. #pragma comment(linker, "/STACK:102400000,102400000")
  2. #include<iostream>
  3. #include<string>
  4. #include<algorithm>
  5. #include<vector>
  6. using namespace std;
  7. int num=0;
  8. void display()
  9. {
  10. cout<<num<<endl;
  11. }
  12. struct MyNode{
  13. int node1;
  14. int node2;
  15. };
  16. vector<MyNode> mynode1;
  17. int test(){
  18. for(int i=0;i<2;i++)
  19. {
  20. cout<<"start"<<endl;
  21. cout<<mynode1[i].node1<<endl;
  22. cout<<mynode1[i].node2<<endl;
  23. }
  24. }
  25. void ceshi(vector<MyNode> mynode)
  26. {
  27. cout<<"mynode"<<" "<<mynode[0].node1<<endl;
  28. cout<<"mynode"<<" "<<mynode[0].node2<<endl;
  29. if(mynode[0].node1==1)
  30. {
  31. cout<<"one"<<endl;
  32. }
  33. cout<<"尝试赋值"<<endl;
  34. cout<<"mynode[1]= "<<mynode[1].node1<<endl;
  35. cout<<"mynode[1].node= "<<mynode[1].node2<<endl;
  36. for(int i=0;i<2;i++)
  37. {
  38. cout<<mynode[i].node1<<endl;
  39. cout<<mynode[i].node2<<endl;
  40. }
  41. cout<<"start"<<endl;
  42. int test();
  43. }
  44. int main()
  45. {
  46. //一维数组的话我的电脑大概可以开50w
  47. int a[500000];
  48. cout<<sizeof(a)<<endl;
  49. //二维数组
  50. int b[210000][2] ;
  51. //cout<<sizeof(b);
  52. num=100;
  53. display();
  54. MyNode temp;
  55. temp.node1=1;
  56. temp.node2=2;
  57. mynode1.push_back(temp);
  58. temp.node1=3;
  59. temp.node2=4;
  60. mynode1.push_back(temp);
  61. ceshi(mynode1);
  62. return 0;
  63. }

学习资料:

学习前,做的上面的测试,便于后面的实验的展开。

首先,这两天一直在学习容器的使用,查阅了一些学习资料这里做一下整理:

https://blog.csdn.net/u014465639/article/details/70241850

 

总结与提炼方法:

 

1.容器作为参数的使用方法也存在着传值和传地址的方式

     一下附上测试用例,我们看的出只有传值才回改变结果

  1. void ceshi(vector<MyNode> &mynode)
  2. {
  3. cout<<"mynode"<<" "<<mynode[0].node1<<endl;
  4. cout<<"mynode"<<" "<<mynode[0].node2<<endl;
  5. if(mynode[0].node1==1)
  6. {
  7. cout<<"one"<<endl;
  8. }
  9. cout<<"尝试赋值"<<endl;
  10. cout<<"mynode[1]= "<<mynode[1].node1<<endl;
  11. cout<<"mynode[1].node= "<<mynode[1].node2<<endl;
  12. for(int i=0;i<2;i++)
  13. {
  14. cout<<mynode[i].node1<<endl;
  15. cout<<mynode[i].node2<<endl;
  16. }
  17. cout<<"start"<<endl;
  18. int test();
  19. }
  20. void ceshi(vector<MyNode> mynode)
  21. {
  22. cout<<"mynode"<<" "<<mynode[0].node1<<endl;
  23. cout<<"mynode"<<" "<<mynode[0].node2<<endl;
  24. if(mynode[0].node1==1)
  25. {
  26. cout<<"one"<<endl;
  27. }
  28. cout<<"尝试赋值"<<endl;
  29. cout<<"mynode[1]= "<<mynode[1].node1<<endl;
  30. cout<<"mynode[1].node= "<<mynode[1].node2<<endl;
  31. for(int i=0;i<2;i++)
  32. {
  33. cout<<mynode[i].node1<<endl;
  34. cout<<mynode[i].node2<<endl;
  35. }
  36. cout<<"start"<<endl;
  37. int test();
  38. }

2.容器的初始化以及访问:

    默认初始化为0,

  1. cout<<"mynode"<<" "<<mynode[0].node1<<endl;
  2. cout<<"mynode"<<" "<<mynode[0].node2<<endl;


3.容器的赋值

我们通过push_back()为其进行赋值

  1. MyNode temp;
  2. temp.node1=1;
  3. temp.node2=2;
  4. mynode1.push_back(temp);

切记:

在使用的时候要注意容器的实际大小,我们通常是先初始化然后再使用的

 

 

初始化的问题:

普通容器的初始化

  1. vector <int> communityA(sizeOfArray,0);
  2. vector <int> communityB(sizeOfArray,0);

结构体容器的初始化

  1. MyNode temp1;
  2. temp1.node1=0;
  3. temp1.node2=0;
  4. vector<MyNode> commDegreeNodeAfterRemove(sizeOfArray,temp1);

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/243906
推荐阅读
相关标签
  

闽ICP备14008679号