一 特性说明
vector是一个动态数组,当空间不足的时候插入新元素,vector会重新申请一块更大内存空间,将旧空间数据拷贝到新空间,然后释放旧空间。Vector是单口容器,所以在尾端插入和删除效率较高,在指定位置插入,势必会引起元素移动,效率较低。 ****reserv和resize的区别? 答:reserve是容器预留空间,但在空间内不真正创建元素对象,所以在没有添加新的对象之前,不能引用容器内的元素。 resize是改变容器的大小,且在创建对象,因此,调用这个函数之后,酒可以引用容器内的对象了。
1 Vector 拷贝构造
2常用赋值操作
3-vector的大小操作
4-数据存储操作
5-插入与删除操作
实例:
```cpp
#include<iostream>
using namespace std
;
#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
;
int arr
[] = { 10,20,30,40 };
vector
<int>v2(arr
, arr
+ sizeof(arr
)/sizeof(int));
vector
<int>v3(v2
.begin(), v2
.end());
vector
<int>v4(v3
);
printVector(v2
);
printVector(v3
);
printVector(v4
);
}
void test02() {
int arr
[] = { 10,20,30,40 };
vector
<int>v1(arr
, arr
+ sizeof(arr
) / sizeof(int));
vector
<int>v2
;
v2
.assign(v1
.begin(), v1
.end());
vector
<int>v3
;
v3
= v2
;
int arr1
[] = { 100,200,300,400 };
vector
<int>v4(arr1
, arr1
+ sizeof(arr1
) / sizeof(int));
printVector(v1
);
printVector(v2
);
printVector(v3
);
printVector(v4
);
cout
<< "------------------------------------" << endl
;
v4
.swap(v1
);
printVector(v1
);
printVector(v2
);
printVector(v3
);
printVector(v4
);
}
void test03() {
int arr1
[] = { 100,200,300,400 };
vector
<int>v1(arr1
, arr1
+ sizeof(arr1
) / sizeof(int));
cout
<< "size:" << v1
.size() << endl
;
if (v1
.empty())
cout
<< "空!" << endl
;
cout
<< "不空" << endl
;
printVector(v1
);
v1
.resize(2);
printVector(v1
);
v1
.resize(6,1);
printVector(v1
);
cout
<< v1
.capacity() << endl
;
}
void test04() {
int arr1
[] = { 100,200,300,400 };
vector
<int>v1(arr1
, arr1
+ sizeof(arr1
) / sizeof(int));
for (int i
= 0; i
< v1
.size(); ++i
)
cout
<< v1
[i
] << " ";
cout
<< endl
;
for (int i
= 0; i
< v1
.size(); ++i
)
cout
<< v1
.at(i
) << " ";
cout
<< endl
;
cout
<< "front:" << v1
.front() << endl
;
cout
<< "end:" << v1
.back() << endl
;
}
void test05() {
vector
<int>v
;
v
.push_back(10);
v
.push_back(20);
v
.insert(v
.begin(), 30);
v
.insert(v
.end(), 40);
v
.insert(v
.begin() + 2, 100);
printVector(v
);
v
.erase(v
.begin());
printVector(v
);
v
.erase(v
.begin() + 1, v
.end());
printVector(v
);
v
.clear();
printVector(v
);
}
//巧用swap缩减空间
void test06() {
vector
<int>v
;
for (int i
= 0; i
< 100000; ++i
)
v
.push_back(i
);
cout
<< "size:" << v
.size() << endl
;
cout
<< "capacity:" << v
.capacity() << endl
;
v
.resize(10);
cout
<< "---------------------------" << endl
;
cout
<< "size:" << v
.size() << endl
;
cout
<< "capacity:" << v
.capacity() << endl
;
vector
<int>(v
)
.swap(v
);
cout
<< "---------------------------" << endl
;
cout
<< "size:" << v
.size() << endl
;
cout
<< "capacity:" << v
.capacity() << endl
;
}
int main() {
test06();
return 0;
}
reserve 预留空间 与resize区别
void test07() {
int num
= 0;
int* address
= NULL;
vector
<int>v
;
v
.reserve(100000);
for (int i
= 0; i
< 10000; ++i
) {
v
.push_back(i
);
if (address
!= &(v
[0])) {
address
= &(v
[0]);
num
++;
}
}
cout
<< "num:" <<num
<<endl
;
}
转载请注明原文地址: https://mac.8miu.com/read-492674.html