向量 vector 是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为容器。 与string相同, vector 同属于STL(Standard Template Library, 标准模板库)中的一种自定义的数据类型, 可以广义上认为是数组的增强版。
在使用它时, 需要包含头文件 vector, #include<vector>
vector 容器与数组相比其优点在于它能够根据需要随时自动调整自身的大小以便容下所要放入的元素。此外, vector 也提供了许多的方法来对自身进行操作。
vector类的基本操作有:
1>. a.size() //获取向量中的元素个数
2>. a.empty() //判断向量是否为空
3>. a.clear() //清空向量中的元素
4>. 复制
a = b ; //将b向量复制到a向量中
5>. 比较
保持 ==、!=、>、>=、<、<= 的惯有含义 ;
如: a == b ; //a向量与b向量比较, 相等则返回1
6>. 插入 - insert
①、 a.insert(a.begin(), 1000); //将1000插入到向量a的起始位置前
②、 a.insert(a.begin(), 3, 1000) ; //将1000分别插入到向量元素位置的0-2处(共3个元素)
③、 vector<int> a(5, 1) ;
vector<int> b(10) ;
b.insert(b.begin(), a.begin(), a.end()) ; //将a.begin(), a.end()之间的全部元素插入到b.begin()前
7>. 删除 - erase
①、 b.erase(b.begin()) ; //将起始位置的元素删除
②、 b.erase(b.begin(), b.begin()+3) ; //将(b.begin(), b.begin()+3)之间的元素删除
8>. 交换 - swap
b.swap(a) ; //a向量与b向量进行交换
以下是实验代码:
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v;
v.push_back(3); //数组尾部插入3
v.push_back(2);
v.push_back(1);
v.push_back(0);
cout << " 下标 " << v[3] << endl;
cout << " 迭代器 " << endl;
for (vector<int>::iterator i = v.begin(); i != v.end(); ++i)
{
cout << *i << " ";
}
cout << endl;
v.insert(v.begin(), 4396);
v.insert(v.end(), 777);
for (vector<int>::iterator i = v.begin(); i != v.end(); ++i)
{
cout << *i << " ";
}
cout << endl;
vector<int> arr(10);
for (int i = 0; i < 10; i++)
{
arr[i] = i;
}
for (vector<int>::iterator i = arr.begin(); i != arr.end(); ++i)
{
cout << *i << " ";
}
cout << endl;
arr.erase(arr.begin());//删除 同insert
for (vector<int>::iterator i = arr.begin(); i != arr.end(); ++i)
{
cout << *i << " ";
}
cout << endl;
arr.erase(arr.begin(), arr.begin() + 5);
for (vector<int>::iterator i = arr.begin(); i != arr.end(); ++i)
{
cout << *i << " ";
}
cout << endl;
system("pause");
return 0;
}
操作时发现了vector::insert操作的位置有些奇怪,我以为它会是在我输入的位置处向后挤容器中原有的元素,结果在第一个元素之前插入了4396 ,在最后一个元素之后插入777,如图:
于是我实验了一下:
v.insert(v.begin(),4396);
v.insert(v.end(), 777);
v.insert(v.begin() + 2, 2200);
v.insert(v.end()-1, 666);
结果是
查阅资料后是发现insert begin+n是在第n个元素之前插入,insert end + n 是在n个元素之后插入
本文参考了http://www.cnblogs.com/duoduo369/archive/2012/04/12/2439118.html
以及https://www.cnblogs.com/aminxu/p/4686332.html
(第一篇blog试水)