当前位置: 代码迷 >> 综合 >> 关于标准库类型1:vector
  详细解决方案

关于标准库类型1:vector

热度:9   发布时间:2024-02-10 08:02:34.0

标准库类型vector

表示对象的合集,其中所有对象的类型都相同。集合中每个对象都有与之对应的索引,索引用于访问对象,我们也常常称之为对象

定义和初始化vector对象

vector<T> a1    //a1是一个空vector,他潜在的元素是T类型的,执行默认初始化
vector<T> a2(a1)          //v2中含有v1所有元素的副本
vector<T> a3=a1               //等价于a3(a1)
vector<T> a4(n,val)      //a4中包含了n个重复的元素,每个元素都是val
vector<T> a5(n)                  //包含了n个默认初始化对象
vector<T> a6{a,b,c,d,e}               //a6包含了初始值个数的元素,每个元素被赋予相应的初始值
vector<T> a7={a,b,c,d,e}          //等价于a7{a,b,c,d,e}

#include<iostream>
using namespace std;
#include<vector>int main()
{vector<int> a1;vector<int> a2(a1);vector<int> a3=a1;vector<int> a4(5, 10);vector<int> a5{1,2,3,4,5};vector<int> a6 = { 1, 2, 3, 4, 5 };//cout << a1[0] << endl;//cout << a2[0] << endl;//cout << a3[0] << endl;   因为a1,a2,a3都为空,所以不能访问cout << a4[0] << endl;cout << a5[0] << endl;cout << a6[0] << endl;system("pause");return 0;
}

列表初始化vector对象

  1. 使用拷贝初始化时,只能提供一个初始值
  2. 如果提供一个类内初始值,则只能使用拷贝初始化或者花括号的形式初始化
  3. 如果提供的是初始元素值的列表,则只能把初始值都放在花括号里面进行初始化

列表初始化还是元素个数?

如果用的圆括号,可以说提供的值是用来构造vector对象的
vector<int> a1(10);    //有10个元素,每个都是0
vector<int> a2{ 10 };        //有1个元素,值为10
vector<int> a3(10, 1);            //有10个元素,每个都是1
vector<int> a4{ 10, 1 };       //有两个元素,值分别是10和1

如果使用的是花括号,可以表述为我们想列表初始化该vector对象。
vector<string> b1{ "abc" };      //有一个元素
//vector<string> b2("abc");      //不能使用字符串构件vector对象
vector<string> b1{ 10 };         //有10个元素
vector<string> b1{ 10, "abc" };        //有10个值为abc的元素
要想初始化vector对象,花括号里的值必须与元素类型相同。如果不同,则不呢个作为元素的初始值,因此编译器会尝试用默认初始化vector对象

添加元素push_back

用该方法添加的对象都是添加到vector对象的末尾

    vector<int>a;
for (int i = 0; i < 10; i++)
{
a.push_back(i);
}

其它vector操作

a.empty()          //如果不含任何元素则为真
a.size()     //返回元素个数
a.push_back()       //向尾端添加一个元素
a[n]       //返回第n个元素的引用
a=b     //替换元素
a={a,b,c,d}       //替换元素
a==b    //判断是否相等
a!=b       //判断是否不等
<,<=,>,>=      //以字典顺序进行比较

索引

使用下标运算符能获取到指定的元素。和string一样,vector的对象下标也是从0开始,下标的类型是相应的size_type。