STL—— 容器(vector)的内存分配,声明时的普通构造&带参构造
vector 的几种带参构造 & 初始化与内存分配:
1. 普通的带参构造:
vector 的相关对象可以在声明时通过 vector 的带参构造函数进行内存分配,如下:
1 #include <iostream> 2 #include <vector> 3 4 using namespace std; 5 6 int main() 7 { 8 //vector 带参构造,分配10个int空间的内存 9 vector<int>num(10); 10 11 cout << "num 的元素个数:" << num.size() << endl; 12 cout << "num 容器的大小:" << num.capacity() << endl; 13 14 for (int i = 0; i < num.size(); i++) 15 { 16 cout << num[i] << endl; 17 } 18 19 20 return 0; 21 }
打印结果:
这种情况便可以通过下标直接访问了。
1 vector<int> num(10); 2 3 num[0] = 1; //可以通过下标访问 4 num[1] = 2;
带参构造时也可以对内存的初始化,方法如下:
1 #include <iostream> 2 #include <vector> 3 4 using namespace std; 5 6 int main() 7 { 8 //vector 带参构造,分配10个int空间的内存,并且将值都初始化为666 9 vector<int>num(10, 666); 10 11 cout << "num 的元素个数:" << num.size() << endl; 12 cout << "num 容器的大小:" << num.capacity() << endl; 13 14 num[0] = 1; 15 num[1] = 2; 16 17 for (int i = 0; i < num.size(); i++) 18 { 19 cout << num[i] << endl; 20 } 21 22 return 0; 23 }
打印结果:
2. 使用其他 vector 进行带参构造
使用其他 vector 对象当做参数进行构造,如下代码:
1 #include <iostream> 2 #include <vector> 3 4 using namespace std; 5 6 int main() 7 { 8 vector<int>num(10, 666); 9 //用 num 当做参数构造 num_1 10 vector<int>num_1(num); 11 12 num[0] = 1; 13 num[1] = 2; 14 15 printf("num的值:\n"); 16 for (int i = 0; i < num.size(); i++) 17 { 18 cout << num[i] << endl; 19 } 20 printf("num_1的值:\n"); 21 for (int i = 0; i < num_1.size(); i++) 22 { 23 cout << num_1[i] << endl; 24 } 25 return 0; 26 }
打印结果:
3. 使用其他 vector 对象的迭代器进行带参构造:
1 #include <iostream> 2 #include <vector> 3 4 using namespace std; 5 6 int main() 7 { 8 vector<int>num(10, 666); 9 10 //用 num 的迭代器当做参数构造 num_1,迭代器返回的值可以进行 + - 运算 11 vector<int>num_1(num.begin() + 5, num.end()); 12 13 num[0] = 1; 14 num[1] = 2; 15 16 printf("num的值:\n"); 17 for (int i = 0; i < num.size(); i++) 18 { 19 cout << num[i] << endl; 20 } 21 printf("num_1的值:\n"); 22 for (int i = 0; i < num_1.size(); i++) 23 { 24 cout << num_1[i] << endl; 25 } 26 return 0; 27 }
打印结果:
用 num.begin() + 5 至 num.end() 之间的参数对 num_1 进行构造
借用迭代器的概念,我们也可以使用数组来对 vector 进行带参构造,如下:
1 #include <iostream> 2 #include <vector> 3 4 using namespace std; 5 6 int main() 7 { 8 int test[] = { 1,2,3,4,5 }; 9 vector<int>num(test, test + 2); 10 11 printf("num的值:\n"); 12 for (int i = 0; i < num.size(); i++) 13 { 14 cout << num[i] << endl; 15 } 16 17 return 0; 18 }
打印结果:
=========================================================================================================================