结构体vector容器的使用以及结构体容器的初始化

前言:

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

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

完整的测试用例

#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;
 } 
 

学习资料:

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

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

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

总结与提炼方法:

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);

猜你喜欢

转载自blog.csdn.net/qq_37457202/article/details/83241349