前言:

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

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

完整的测试用例

#pragma comment(linker, "/STACK:102400000,102400000")
#include<iostream>
#include<string>
#include<algorithm>
#include<vector>
using namespace std;
int num=0;

void display()
{
cout<<num<<endl;
}

struct MyNode{
int node1;
int node2;
};
vector<MyNode> mynode1;


int test(){
for(int i=0;i<2;i++)
{
cout<<"start"<<endl;
cout<<mynode1[i].node1<<endl;
cout<<mynode1[i].node2<<endl;
}
}

void ceshi(vector<MyNode> mynode)
{
cout<<"mynode"<<" "<<mynode[0].node1<<endl;
cout<<"mynode"<<" "<<mynode[0].node2<<endl;
if(mynode[0].node1==1)
{
cout<<"one"<<endl;
}
cout<<"尝试赋值"<<endl;
cout<<"mynode[1]= "<<mynode[1].node1<<endl;
cout<<"mynode[1].node= "<<mynode[1].node2<<endl;

for(int i=0;i<2;i++)
{
cout<<mynode[i].node1<<endl;
cout<<mynode[i].node2<<endl;
}
cout<<"start"<<endl;
int test();
}



int main()
{
//一维数组的话我的电脑大概可以开50w
int a[500000];
cout<<sizeof(a)<<endl;
//二维数组
int b[210000][2] ;
//cout<<sizeof(b);
num=100;
display();
MyNode temp;
temp.node1=1;
temp.node2=2;
mynode1.push_back(temp);
temp.node1=3;
temp.node2=4;
mynode1.push_back(temp);
ceshi(mynode1);
return 0;
}

学习资料:

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


总结与提炼方法:


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

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

void ceshi(vector<MyNode> &mynode)
{
cout<<"mynode"<<" "<<mynode[0].node1<<endl;
cout<<"mynode"<<" "<<mynode[0].node2<<endl;
if(mynode[0].node1==1)
{
cout<<"one"<<endl;
}
cout<<"尝试赋值"<<endl;
cout<<"mynode[1]= "<<mynode[1].node1<<endl;
cout<<"mynode[1].node= "<<mynode[1].node2<<endl;

for(int i=0;i<2;i++)
{
cout<<mynode[i].node1<<endl;
cout<<mynode[i].node2<<endl;
}
cout<<"start"<<endl;
int test();
}

void ceshi(vector<MyNode> mynode)
{
cout<<"mynode"<<" "<<mynode[0].node1<<endl;
cout<<"mynode"<<" "<<mynode[0].node2<<endl;
if(mynode[0].node1==1)
{
cout<<"one"<<endl;
}
cout<<"尝试赋值"<<endl;
cout<<"mynode[1]= "<<mynode[1].node1<<endl;
cout<<"mynode[1].node= "<<mynode[1].node2<<endl;

for(int i=0;i<2;i++)
{
cout<<mynode[i].node1<<endl;
cout<<mynode[i].node2<<endl;
}
cout<<"start"<<endl;
int test();
}

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

    默认初始化为0,

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


3.容器的赋值

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

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

切记:

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



初始化的问题:

普通容器的初始化

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

结构体容器的初始化

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