1 创建方式
- std::vector
name; // 创建一个空的vector容器。 - std::vector
name {1, 2, 3, 4}; //创建容器的同时初始化容器数据类型和元素个数。 - std::vector
(len); // 创建容器的同时指定元素个数但不初始化。 - std::vector
(len,value); // 创建容器的同时指定元素个数为len,并将所有元素值初始化为value,其中value可以为常量也可以为变量表示。 - 复制存储类型相同的其他vector容器:
- std::vector
value1(5, 'c'); - std::vector
value2(value1); // 将value1中的元素赋值为value2
- 复制存储类型相同的其他vector容器指定范围的值:
- int array[]={1,2,3};
- std::vector
values(array, array+2);//values 将保存{1,2} - std::vector
value1{1,2,3,4,5}; - std::vector
value2(std::begin(value1),std::begin(value1)+3);//value2保存{1,2,3}
使用reverse()成员函数重新定义vector容器容量时,其内存地址有可能会改变,所以其原有创建好的迭代器有可能会发生改变,使用时可以重新进行生成。
2 成员函数
- std::vector
name; // 创建一个空的vector容器。 - std::vector
name {1, 2, 3, 4}; //创建容器的同时初始化容器数据类型和元素个数。 - std::vector
(len); // 创建容器的同时指定元素个数但不初始化。 - std::vector
(len,value); // 创建容器的同时指定元素个数为len,并将所有元素值初始化为value,其中value可以为常量也可以为变量表示。 - 复制存储类型相同的其他vector容器:
- std::vector
value1(5, 'c'); - std::vector
value2(value1); // 将value1中的元素赋值为value2
- std::vector
- 复制存储类型相同的其他vector容器指定范围的值:
- int array[]={1,2,3};
- std::vector
values(array, array+2);//values 将保存{1,2} - std::vector
value1{1,2,3,4,5}; - std::vector
value2(std::begin(value1),std::begin(value1)+3);//value2保存{1,2,3}
使用reverse()成员函数重新定义vector容器容量时,其内存地址有可能会改变,所以其原有创建好的迭代器有可能会发生改变,使用时可以重新进行生成。
表1 vector成员函数
| 函数成员 | 函数功能 |
|---|---|
| reserve() | 增加容器的容量。 |
| shrink _to_fit() | 将内存减少到等于当前元素实际所使用的大小。 |
| operator[ ] | 重载了 [ ] 运算符,可以向访问数组中元素那样,通过下标即可访问甚至修改 vector 容器中的元素。 |
| at() | 使用经过边界检查的索引访问元素。 |
| front() | 返回第一个元素的引用。 |
| back() | 返回最后一个元素的引用。 |
| data() | 返回指向容器中第一个元素的指针。 |
| assign() | 用新元素替换原有内容。 |
| push_back() | 在序列的尾部添加一个元素。 |
| pop_back() | 移出序列尾部的元素。 |
| insert() | 在指定的位置插入一个或多个元素。 |
| erase() | 移出一个元素或一段元素。 |
| clear() | 移出所有的元素,容器大小变为 0。 |
| swap() | 交换两个容器的所有元素。 |
| emplace() | 在指定的位置直接生成一个元素。 |
| emplace_back() | 在序列尾部生成一个元素。 |
3 访问容器元素方式
(1)下标索引访问(vector中也提供了at()成员函数)。
(2)成员函数front()和back(),分别返回元素的引用。
(3)data() 成员函数,返回的是容器中首个元素的指针。
(4)迭代器访问。
(1)下标索引访问(vector中也提供了at()成员函数)。
(2)成员函数front()和back(),分别返回元素的引用。
(3)data() 成员函数,返回的是容器中首个元素的指针。
(4)迭代器访问。
(4) 使用基于范围的循环:
#include#include using namespace std; int main() { vector values{1,2,3,4,5}; for (auto&& value : values) cout << value << " "; return 0; } 输出: 1 2 3 4 5
4.4 添加元素
(1)将元素添加在容器的尾部:
- push_back()
- emplace_back() C++11中新增的功能,实现的功能和push_back()一样。
- push_back()
- emplace_back() C++11中新增的功能,实现的功能和push_back()一样。
区别:
使用push_back()时,会先创建这个元素,然后优先选择调用移动构造函数(第二选择拷贝构造函数),将该元素移动或者拷贝到容器中(拷贝的话会自行销毁之前创建的该元素),而emplace_back()会在该容器的尾部直接创建这个元素。
#include(2)容器指定位置插入元素#include using namespace std; class testDemo { public: testDemo(int num):num(num){ std::cout << "调用构造函数" << endl; } testDemo(const testDemo& other) :num(other.num) { std::cout << "调用拷贝构造函数" << endl; } testDemo(testDemo&& other) :num(other.num) { std::cout << "调用移动构造函数" << endl; } private: int num; }; int main() { cout << "emplace_back:" << endl; std::vector demo1; demo1.emplace_back(2); cout << "push_back:" << endl; std::vector demo2; demo2.push_back(2); }
1 insert():
有四种对应的语法格式,返回的都是新插入第一个元素的位置。
#include#include using namespace std; int main() { std::vector v1(10, 1); std::vector v2 {5, 5, 5}; // 1 iterator insert(pos,elem)——在迭代器 pos 指定的位置之前插入一个新元素elem,并返回表示新插入元素位置的迭代器。 v1.insert(v1.begin(), 2); // 2 iterator insert(pos,n,elem)——在迭代器 pos 指定的位置之前插入 n 个元素 elem,并返回表示第一个新插入元素位置的迭代器。 v1.insert(v1.begin()+1, 2, 3); // 3 iterator insert(pos,first,last)——在迭代器 pos 指定的位置之前,插入其他容器(不仅限于vector)中位于 [first,last) 区域的所有元素,并返回表示第一个新插入元素位置的迭代器。 v1.insert(v1.begin(), v2.begin(), v2.end()); // 4 iterator insert(pos,initlist)——在迭代器 pos 指定的位置之前,插入初始化列表(用大括号{}括起来的多个元素,中间有逗号隔开)中所有的元素,并返回表示第一个新插入元素位置的迭代器。 v1.insert(v1.begin(), {6, 6, 6, 6}); for(auto i=v1.begin(); i!=v1.end(); i++){ cout << *i << endl; } }
2 emplace
emplace() 是 C++ 11 标准新增加的成员函数,只能在vector容器的指定位置前插入一个的元素。
语法格式:
iterator emplace (const_iterator pos, args...); // 函数返回的时新插入元素位置的迭代器。
同上,emplace在插入元素时,也是直接在插入位置生成一个新的元素,而不是单独生成后再将其移动或者复制到容器中。
在vector容器中,访问、添加、插入元素都只能借助vector模板类中提供的成员函数,删除操作中除了成员函数外,还可以借助一些全局函数。
5 删除元素
表2 删除vector元素的几种方式。
| 函数 | 功能 |
|---|---|
| pop_back() | 删除 vector 容器中最后一个元素。(无返回值) |
| erase(pos) | 删除 vector 容器中 pos 迭代器指定位置处的元素,并返回指向被删除元素下一个位置元素的迭代器。 |
| erase(beg,end) | 删除 vector 容器中位于迭代器 [beg,end)指定区域内的所有元素,并返回指向被删除区域下一个位置元素的迭代器 |
| remove(first, last, elm) | 删除容器中所有和指定元素值相等的元素(定义在头文件中),并返回指向最后一个元素下一个位置的迭代器。值得一提的是,调用该函数不会改变容器的大小和容量。 |
| clear() | 删除 vector 容器中所有的元素,使其变成空的 vector 容器。 |
swap() 函数在头文件 和
中都有定义,使用时引入其中一个即可。
关于remove的详细介绍在:
remove函数使用方法_北城路人的博客-CSDN博客



