早些时候学习vector时并没有具体关注一些初始化的细节,现在应论文需要需要使用vector编写一个算法,遂对vector初始化中经常出现的错误进行集中的整理,以备后期继续的学习!
(1)方式一:vector<T>v(num_element)
例1:#include<iostream>
#include<vector>
using namespace std;
class A
{
private:
int a;
double b;
public:
void initial();
void output();
};
void A::initial()
{
a = 10;
b = 19.09;
}
void A::output()
{
cout << a <<" " <<b << endl;
}
int main()
{
vector<A>a(10);
//reserve(20);
//只对前10个数进行初始值
for (int i = 0; i < 10; i++)
{
a[i].initial();
}
for (int i = 0; i < 10;i++)
{
a[i].output();
}
system("pause");
return 0;
}
运行结果为:
例2;#include<iostream>
#include<vector>
using namespace std;
class A
{
private:
int a;
double b;
public:
void initial();
void output();
};
void A::initial()
{
a = 10;
b = 19.09;
}
void A::output()
{
cout << a <<" " <<b << endl;
}
int main()
{
vector<A>a(20);
//a.resize(20);
//只对前10个数进行初始值
for (int i = 0; i < 10; i++)
{
a[i].initial();
}
for (int i = 0; i < 20;i++)
{
a[i].output();
}
system("pause");
return 0;
}
(2)方式二:使用reserve()函数
vector<T>v;
v.reserve(ele_ment)
#include<iostream>
#include<vector>
using namespace std;
class A
{
private:
int a;
double b;
public:
void initial();
void output();
};
void A::initial()
{
a = 10;
b = 19.09;
}
void A::output()
{
cout << a <<" " <<b << endl;
}
int main()
{
vector<A>a;
a.reserve(10);
//只对前10个数进行初始值
for (int i = 0; i < 10; i++)
{
a[i].initial();
}
for (int i = 0; i < 10;i++)
{
a[i].output();
}
system("pause");
return 0;
}
但是编译结果出乎意料:
这里原因后续解决,换做resize()函数,
#include<iostream>
#include<vector>
using namespace std;
class A
{
private:
int a;
double b;
public:
void initial();
void output();
};
void A::initial()
{
a = 10;
b = 19.09;
}
void A::output()
{
cout << a <<" " <<b << endl;
}
int main()
{
vector<A>a;
a.resize(10);
//只对前10个数进行初始值
for (int i = 0; i < 10; i++)
{
a[i].initial();
}
for (int i = 0; i < 10;i++)
{
a[i].output();
}
system("pause");
return 0;
}
编译结果为:
再看一种情况:
#include<iostream>
#include<vector>
using namespace std;
class A
{
private:
int a;
double b;
public:
void initial();
void output();
};
void A::initial()
{
a = 10;
b = 19.09;
}
void A::output()
{
cout << a <<" " <<b << endl;
}
int main()
{
vector<A>a;
a.resize(20);
//只对前10个数进行初始值
for (int i = 0; i < 10; i++)
{
a[i].initial();
}
for (int i = 0; i < 20;i++)
{
a[i].output();
}
system("pause");
return 0;
}
通过以上的代码演示,可以总结如下:
(1)在使用容器时,如果声明的时候直接指定容量,如vector<int>v(20); 那么在指定20个容量的同时创建了20个个体;同时v.resize(20)在重新指定容器容量大小的时候,并进行了初始化;
(2)reserve函数仅仅扩大了容器的容量空间,并没有进行初始化;
(3)当使用下标索引的形式来对容器个体进行操作时,需要使用resize()或者直接进行初始化(如vector<int>v(20));而在使用push_back()函数添加个体到容器中时,可以使用reserve,或者其他的resize(),或者直接使用vector<int>v(20)