C vector,c++ vector 拷贝
墨初 知识笔记 120阅读
标准库类型 vector 表示对象的集合其中所有对象的类型都相同。集合中的每个对象都有一个与之对应的索引所应用于访问对象。因为引用不是对象所以不包含引用的 vector 。组成 vector 的元素可以是 vector 。
vector 是一个类模板。vector 是模板而非类型由 vector 生成的类型必须包含 vector 中元素的类型【vector<类型>
】。

#include<vector>
using std::vector;

直接初始化的适用情况 初始值已知且数量较少初始值是另一个vector对象的副本所有元素的初始值都一样
两个 vector 对象的类型必须相同。
列表初始化 vector 对象vector<T> v {a,b,c,...};
可用 vector 对象容纳的元素数量和所有元素的统一初始值初始化 vector 对象。
vector<T> v(n,val);
可只提供 vector 对象容纳的元素数量而省略初始值此时库创建一个值初始化的元素初值并赋给容器中的所有元素该初值由 vector 对象中元素的类型决定。
若元素是内置类型如int元素初始值自动设为0若元素是某种类类型如string则元素由默认初始化。
vector<int> ivec(10);
// 10个元素每个都初始化为0
vector<string> svec(10);
// 10个元素每个都是空 string 对象
vector<int> v1(10);
// v1有10个元素每个元素的值为0
vector<int> v2{10};
// v2有1个元素该元素值为10
vector<int> v3(10,1);
// v3有10个元素每个元素的值为1
vector<int> v4{10,1};
// v4有2个元素元素值分别为10和1
使用圆括号提供的值是用来构造vector对象的使用花括号可描述成列表初始化该vector对象初始化过程会尽可能地把花括号内的值当成元素初始值的列表处理只有无法执行列表初始化时才考虑其他初始化方式。
若初始化时使用花括号的形式但是提供的值不能使用列表初始化会考虑用该值构造vector对象。列表初始化vector对象花括号的值必须与元素类型相同。
vector<string> v5{hi};
// 列表初始化v5有一个元素
vector<string> v6(hi);
// 错误不能使用字符串字面值构建vector对象
vector<string> v7{10};
// v7有10个默认初始化的元素
vector<string> v8{10,hi};
// v8有10个值为hi的元素
向vector对象中添加元素
创建一个空vector在运行时再利用vector的成员函数 push_back 向其中添加元素。push_back 负责把一个值当成 vector 对象的伪元素“压到”vector 对象的“尾端”。若直到运行时才能知道vector对象中元素的确切个数也可使用该方法。
vector<int> v;
for(int i 0; i ! 100; i)
v.push_back(i);
string word;
vector<string> text;
while(cin>>word){
text.push_back(word);
}
vector 对象能高效增长能在运行时快速地添加元素。虽然如此但是如果不在定义 vector 对象时设定其大小性能可能更差当所有元素的值都一样时例外。元素的值有所不同时有效的方法是先定义一个空的 vector 对象再在运行时向其中添加具体值。
向 vector 对象添加元素蕴含的编程假定 必须确保所写的循环正确无误特别是在循环有可能改变 vector 对象容量的时候。若循环体内部包含有向 vector 对象添加元素的语句不能使用范围 for 循环。 size返回 vector 对象中元素的个数返回值的类型是由 vector 定义的 size_type 类型。
使用 size_type 需首先指定其是哪种类型定义的vector 对象的类型总是包含着元素的类型。
vector<int>::size_type
两个 vector 对象相等当且仅当它们所含的元素个数相同而且对应位置的元素值也相同。
关系元素符依照字典顺序进行比较如果两个 vector 对象的容量不同但是在相同位置上的元素值都一样则元素较少的 vector 对象小于元素较多的 vector 对象若元素的值有区别则 vector 对象的大小关系由第一对相异的元素值的大小关系决定。只有当元素的值可能比较时vector 对象才能被比较【Sales_item 类不支持相等性判断和关系运算等操作不能比较两个 vector<Sales_item>对象】。
下标下标从 0 开始记下标类型是相应的 size_type 类型。
使用下标运算符可以获取到指定的元素。可通过计算得到 vector 内对象的索引进而直接获取索引位置上的元素。
只要 vector 对象不是一个常量可以向下标运算符返回的元素赋值。
不能使用下标形式添加元素。当有一个空的 vector 对象时根本不包含任何元素就不能通过下标去访问任何元素。
下标运算符可用于访问已存在的元素不能用于添加元素且只能对确知已存在的元素执行下标操作。