读者老爷好,俺最近浅浅学了一些vector的知识,vector是STL容器的一种。有兴趣的话不妨垂阅!
目录
首先使用vector需要包含头文件<vector> 好吧。<vector>中的其中一个类模板vector就是本博客要介绍的。
进入vector的文档介绍 可以看到:
确实是一个类模板,第一个模板参数就是要存储的数据的类型,第二个模板参数是跟空间配置器和内存池相关的,不用理先。那我们就浅浅介绍一下。
其实当这个类模板实例化成具体的类时,这些个具体的类底层就是顺序表。也就是可以认为vector是“一个可以存放任意类型数据的顺序表”。 俺就浅浅介绍vector常用的接口:
PS:俺这篇博客介绍的vector就介绍C++98版本的部分接口哈!
1.constructor
看到文档介绍:
在C++98版本中,构造函数有四种,其中一种还是函数模板,我们一个个来介绍:
1.explicit vector (const allocator_type& alloc = allocator_type())
这就是一个无参构造呗。
其中:
- const allocator_type& alloc = allocator_type()是跟空间配置器有关的东东,咱们先不理先,就把这个函数当成无参构造。
- 对于explicit这个关键字,有兴趣可以参考【C++】类和对象3.0。
- 对于类模板内的成员函数,可以用类模板名代替类类型名。所以可以看到这个无参构造的函数名是vector,当然这个无参构造的函数名也可以是vector<T>。
#include<vector>
using namespace std;
void test1()
{
vector<int> iv;
vector<double> dv;
vector<char> cv;
//…………
}
int main()
{
test1();
return 0;
}
这样子使用就行!
2. explicit vector (size_type n, const value_type& val = value_type(), const allocator_type& alloc = allocator_type())
这就是构造并初始化n个val。
其中:
- const allocator_type& alloc = allocator_type()是跟空间配置器有关的东东,咱们先不理先(这点以下不再赘述)。
- size_type可以去vector中查询到:
size_type就是size_t。
- value_type也可在这里看到:
value_type就是类模板vector的第一个模板参数T。
- 对于explicit这个关键字,有兴趣可以参考【C++】类和对象3.0(这点以下不再赘述)。
- 对于第二个参数的缺省值value_type()。其实就是用无参构造函数value_type()构造一个匿名对象,用这个匿名对象拷贝构造一个临时对象,用这个临时对象作为缺省值。当然,这个临时对象通常来说会被优化掉。
额,对于自定义类型当然有构造函数的概念。若value_type,也就是T,如果是内置类型(比如int),咋办?
为了兼容这些场景,内置类型也有了构造函数的概念了。拿int举例,如:
#include<iostream> using namespace std; int main() { int a = int();//默认是0 int b = int(1);//1 int c(2);//2 int d = 3;//3 cout << a << ' ' << b << ' ' << c << ' ' << d << endl; }
运行结果:
- 对于类模板内的成员函数,可以用类模板名代替类类型名。所以可以看到这个构造的函数名是vector,当然这个构造的函数名也可以是vector<T>(这点以下不再赘述)。
这样子使用就行:
#include<vector>
#include<string>
#include<iostream>
using namespace std;
void test2()
{
vector<int> v1(3, 1);//构造v1并用3个1初始化
vector<int> v2(3);//构造v2并用3个0初