赞
踩
功能:
vector与普通数组的区别:
动态扩展:
函数原型:
示例:
#include <iostream> using namespace std; #include <string> #include <vector> void printVector(vector<int>&v) { for (vector<int>::iterator it = v.begin(); it != v.end(); it++) { cout << (*it) << " "; } cout << endl; } //vector容器构造 void test01() { vector<int> v1; //默认构造,无参构造 for (int i = 0; i < 10; i++) { v1.push_back(i); } printVector(v1); //通过区间方式进行构造 vector<int> v2(v1.begin(), v1.end()); printVector(v2); //n个elem方式构造 vector<int>v3(10, 100); printVector(v3); } int main() { test01(); system("pause"); return 0; }
函数原型:
示例:
#include <iostream> using namespace std; #include <string> #include <vector> void printVector(vector<int>&v) { for (vector<int>::iterator it = v.begin(); it != v.end(); it++) { cout << (*it) << " "; } cout << endl; } //vector容器构造 void test01() { vector<int> v1; //默认构造,无参构造 for (int i = 0; i < 10; i++) { v1.push_back(i); } printVector(v1); //赋值 operator vector<int> v2; v2 = v1; printVector(v2); //assign vector<int>v3; v3.assign(v1.begin(), v1.end()); printVector(v3); //n个elem方式赋值 vector<int>v4; v4.assign(10, 100); printVector(v4); } int main() { test01(); system("pause"); return 0; }
函数原型:
示例:
#include <iostream> using namespace std; #include <string> #include <vector> void printVector(vector<int>&v) { for (vector<int>::iterator it = v.begin(); it != v.end(); it++) { cout << (*it) << " "; } cout << endl; } //vector容器构造 void test01() { vector<int> v1; //默认构造,无参构造 for (int i = 0; i < 10; i++) { v1.push_back(i); } printVector(v1); if (v1.empty()) //为真代表容器为空 { cout << "v1为空" << endl; } else { cout << "v1不为空" << endl; cout << "v1的容量:" << v1.capacity() << endl; cout << "v1的大小:" << v1.size() << endl; } //重新指定大小 v1.resize(15,100); //利用重载版本,可以指定默认填充值 printVector(v1); //如果重新指定的比原来长了,默认用0填充新的位置 v1.resize(5); printVector(v1); //如果重新指定的比原来短了,超出部分会被删除 } int main() { test01(); system("pause"); return 0; }
运行结果:
函数原型:
示例:
#include <iostream> using namespace std; #include <string> #include <vector> void printVector(vector<int>&v) { for (vector<int>::iterator it = v.begin(); it != v.end(); it++) { cout << (*it) << " "; } cout << endl; } void test01() { vector<int> v1; //默认构造,无参构造 //尾插 v1.push_back(10); v1.push_back(20); v1.push_back(30); v1.push_back(40); v1.push_back(50); printVector(v1); //尾删 v1.pop_back(); printVector(v1); //插入 第一个参数是迭代器 v1.insert(v1.begin(), 100); printVector(v1); v1.insert(v1.begin(), 2, 1000); printVector(v1); //删除 v1.erase(v1.begin()); printVector(v1); //清空 //v1.erase(v1.begin(), v1.end()); v1.clear(); printVector(v1); } int main() { test01(); system("pause"); return 0; }
运行结果:
函数原型:
示例:
#include <iostream> using namespace std; #include <string> #include <vector> void test01() { vector<int> v1; //默认构造,无参构造 for (int i = 0; i < 10; i++) { v1.push_back(i); } //利用[]方式访问数组元素 for (int i = 0; i < v1.size(); i++) { cout << v1[i] << " "; } cout << endl; //利用at方式访问数组元素 for (int i = 0; i < v1.size(); i++) { cout << v1.at(i) << " "; } cout << endl; //获取第一个元素 cout << "第一个元素为:" << v1.front() << endl; //获取最后一个元素 cout << "最后一个元素为:" << v1.back() << endl; } int main() { test01(); system("pause"); return 0; }
运行结果:
函数原型:
示例:
#include <iostream> using namespace std; #include <string> #include <vector> void printVector(vector<int>&v) { for (vector<int>::iterator it = v.begin(); it != v.end(); it++) { cout << (*it) << " "; } cout << endl; } void test01() { vector<int> v1; //默认构造,无参构造 for (int i = 0; i < 10; i++) { v1.push_back(i); } cout << "交换前:" << endl; printVector(v1); vector<int>v2; for (int i = 10; i > 0; i--) { v2.push_back(i); } printVector(v2); cout << "交换后:" << endl; v1.swap(v2); printVector(v1); printVector(v2); } //实际用途:巧用swap可以收缩内存空间 void test02() { vector<int>v; for (int i = 0; i < 10000; i++) { v.push_back(i); } cout << "v的容量为:" << v.capacity() << endl; cout << "v的大小为:" << v.size() << endl; v.resize(3); //重新指定大小 cout << "v的容量为:" << v.capacity() << endl; cout << "v的大小为:" << v.size() << endl; vector<int>(v).swap(v); cout << "v的容量为:" << v.capacity() << endl; cout << "v的大小为:" << v.size() << endl; } int main() { test01(); cout << "===========" << endl; test02(); system("pause"); return 0; }
运行结果:
注:巧用swap
函数可以起到收缩内存的作用。通过vector<int>(v).swap(v);
这行代码实现。首先vector<int>(v)
是创建了一个匿名对象,匿名对象的大小和容量都是v.size()
,执行swap
交换函数之后,匿名对象指向了原来有大量内存浪费的位置,容器v
则指向了大小和容量都是v.size()
的容器空间。同时,匿名对象在使用完之后,系统会将其自动释放,也就将内存浪费的问题给解决了。
作用:减少vector
在动态扩展容量时的扩展次数
函数原型:
示例:
#include <iostream> using namespace std; #include <string> #include <vector> void printVector(vector<int>&v) { for (vector<int>::iterator it = v.begin(); it != v.end(); it++) { cout << (*it) << " "; } cout << endl; } void test01() { vector<int> v1; //默认构造,无参构造 //利用reserve预留空间 v1.reserve(10000); int num = 0; //统计开辟次数 int *p = NULL; for (int i = 0; i < 10000; i++) { v1.push_back(i); if (p != &v1[0]) { p = &v1[0]; num++; } } cout << "num=" << num << endl; } int main() { test01(); system("pause"); return 0; }
运行结果:
注:本文参考b站黑马程序员C++课程
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。