Vector是一个封装了动态大小数组的顺序容器(Sequence
Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。
#include<iostream>
#include<vector>
using namespace std;
class p
{
public:
p(int a=2,int b=3)
{
_a = a;
_b = b;
}
void print()
{
printf("%d ", _a);
printf("%d ", _b);
}
private:
int _a;
int _b;
};
void test2()
{
p d1(55,66);
vector<p> v1(2);
vector<p> v2(2, d1);
cout << "接下来开始打印v1的内容:" << endl;
for (auto v : v1)
{
v.print();
}
cout << "接下来开始打印v2的内容:" << endl;
for (auto v : v2)
{
v.print();
}
}
int main()
{
test2();
system("pause");
return 0;
}
//迭代器进行初始化创建出来的对象
vector<Date>::iterator it1 = v.begin() + 1;
vector<Date>v1(it1, v.end() - 1);
//访问v1数组就是访问v数组
#include<iostream>
#include<vector>
using namespace std;
int main() {
vector<int> v;
v.push_back(1); //依次输入1、 2、 3
v.push_back(2);
v.push_back(3);
for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
cout << *it << " ";
}
return 0;
}
动态数组的容量是不断的根据输入的数据的大小变化的,但是增加了reserve函数可以提前就进行扩展数组的容量
void test5()
{
vector<p> v1(5);
cout << v1.size() << endl;
cout << v1.capacity() << endl;
v1.reserve(100);
v1.push_back(p(11, 22));
cout << v1.size() << endl;
cout << v1.capacity() << endl;
}
二维vector数组vector Arrayname[size]; Arrayname[]中的每一个元素都是一个vector。我们可以把二维vector数组当做两个维都可以变长的二维数组来理解。
vector
nums(m, vector(n)); //m*n的二维vector
定义了一个vector容器,元素类型为vector,初始化为包含m个vector对象,每个对象都是一个新创立的vector对象的拷贝,而这个新创立的vector对象被初始化为包含n个0。
定义了一个vector容器,元素类型为vector,初始化为包含m个vector对象,每个对象都是一个新创立的vector对象的拷贝,而这个新创立的vector对象被初始化为包含n个0
初始化:
vector a(5); //初始化5个值为0的元素
vector a(5, 1);//定义了5个整型元素的向量,且给出每个元素的初值为1
int b[7] = { 1,2,3,4,5,9,8 }; vector a(b, b + 7); //从数组中获得初值
vector a(b.begin(), b.begin + 3); //定义了a值为b中第0个到第2个(共3个)元素
vector v{ 1,2,3,4,5 }; //使用花括号赋值
for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
cout << *it << " ";
}
是一个替换字符串长度的函数,有两个重载函数,第一个参数都是替换之后的大小,第二个为替换的字母
//pop_back()表示删除vector尾部的元素
size()用来获得vector中元素的个数
insert(it, x)用来向vector的任意迭代器it处插入一个元素x
#include<iostream>
#include<vector>
using namespace std;
int main() {
vector<int> v, v1, v2;
for (int i = 1; i <= 5; i++) v.push_back(i);
for (int i = 10; i <= 13; i++) v1.push_back(i);
//for (int i = 20; i <= 23; i++) v2.push_back(i);
v.insert(v.end(), v1.begin(), v1.end());
//v.insert(v.end(), v2.begin(), v2.end());
for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
cout << *it << " ";
}
return 0;
}
这个函数的作用就是将对象原来的内容全部清空,将你给的内容填入到该对象的空间里面去
用迭代器进行访问
for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
cout << *it << " ";
}
#include<iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> v = { 1,2,3,4,5,6,7,8,9,10 };
//v.assign(10, 0);
/*vector p;
p.assign(v.begin(), v.end());*/
/*v.assign({ 666,667,668 });
for (vector::iterator it = v.begin(); it != v.end(); it++) {
cout << *it << " ";
}*/
return 0;
}
排序
sort(v.begin(),v.end());
返回vector中的第一个元素
返回vector中的最后一个元素
获知变量类型名称,可以使用 typeid(变量).name()
#include<iostream>
#include<vector>
using namespace std;
int main()
{
//int a = 3;
//if (typeid(a) == typeid(int))
//{
// cout << "int" << endl;
//}
//return 0;
int a = 1;
double b = 3.14;
cout << typeid(a).name() << endl;
cout << typeid(b).name() << endl;
return 0;
}
#include<iostream>
#include<vector>
using namespace std;
int main()
{
auto a = 2;
auto b = 3.14;
auto c = "r";
cout << typeid(a).name() << endl;
cout << typeid(b).name() << endl;
cout << typeid(c).name() << endl;
return 0;
}
#include<iostream>
#include<vector>
using namespace std;
int main()
{
//普通的遍历数组操作
int a[] = { 1,2,3,4,5,6,7 };
//for (int i = 0; i < sizeof(a) / sizeof(a[0]); i++)
//{
// cout << a[i] << " ";
//}
//cout << endl;
//使用auto关键字进行操作
for (auto i : a)
{
cout << i << " ";
}
cout << endl;
return 0;
}