c++ vector

server/2025/1/24 3:00:50/

1. vector 构造函数

功能描述:
vector 构造函数
函数原型
vector v; // 默认构造函数
vector(n, elem); // 将n个elem拷贝给本身
vector(const vector& v); // 拷贝构造函数
vector(v.begin(), v.end()); // 将v[begin(), end())区间中的元素拷贝给本身

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;void printVector(vector<int> &v) {for(vector<int>::iterator it = v.begin(); it != v.end(); it++) {cout << *it << " ";}cout << endl;
}void test01() {vector <int> v1; // 默认构造函数for (int i = 0; i < 10; i++){v1.push_back(i);}printVector(v1);// 通过区间的方式进行构造vector<int> v2(v1.begin(), v1.end());printVector(v2);// n个elem方式构造vector<int> v3(10, 100);printVector(v3);// 拷贝构造函数vector<int> v4(v3);printVector(v4);
}int main(int argc, char const *argv[]) {test01();return 0;
}

2. vector 赋值操作

#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;// vector 赋值操作
// 函数原型:
// vector& operator=(const vector& x); // 重载等号操作
// assign(const_iterator first, const_iterator last); // 将区间[first, last)赋值给本身
// assign(n, elem) // 将n个elem拷贝赋值给本身void printVector(vector<int> &v) {for(vector<int>::iterator it = v.begin(); it != v.end(); it++) {cout << *it << " ";}cout << endl;
}void test01() {vector<int> v1;for(int i = 0; i < 10; i++) {v1.push_back(i);}printVector(v1);// 赋值操作vector<int> v2;v2 = v1;printVector(v2);// 区间赋值v2.assign(v1.begin(), v1.end() - 5);printVector(v2);vector<int> v3;v3.assign(v2.begin(), v2.end() - 2);printVector(v3);// n赋值v3.assign(10, 100);printVector(v3);
}int main(int argc, char const *argv[]) {test01();return 0;
}

3 vector 容量和大小

函数原型:

emty(); // 判断容器是否为空
capacity(); // 容器的容量
size(); // 容器中存放数据的个数
resize(int num); // 重新指定容器的长度,如果指定的长度比原来长,则以默认值填充新位置。如果指定的长度比原来短,则末尾超出容器长度的元素被删除。
resize(int num, int val); // 重新指定容器的长度,如果指定的长度比原来长,则以指定的值填充新位置。如果指定的长度比原来短,则末尾超出容器长度的元素被删除。
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;void printVector(vector<int> &v) {for(vector<int>::iterator it = v.begin(); it != v.end(); it++) {cout << *it << " ";}cout << endl;
}void isEmpty(vector<int> &v) {if (v.empty())  {cout << "v is empty" << endl;}else{cout << "v is not empty" << endl;}
}void test01() {vector <int> v;isEmpty(v);cout << "v.size() = " << v.size() << endl; // 默认是0cout << "v.capacity() = " << v.capacity() << endl; // 默认是0cout << "-------------------" << endl;// 添加数据for (int i = 0; i < 10; i++){v.push_back(i);}printVector(v);isEmpty(v);cout << "v.size() = " << v.size() << endl; //cout << "v.capacity() = " << v.capacity() << endl; // cout << "-------------------" << endl;// 重新指定容器的长度v.resize(15,100); printVector(v); // 如果指定的长度比原来长,则以指定的值填充新位置。cout << "v.size() = " << v.size() << endl; // 存放的数据变多cout << "v.capacity() = " << v.capacity() << endl; // 容器大小不变cout << "-------------------" << endl;// 重新指定短了v.resize(5);printVector(v); // 如果指定的长度比原来短,则末尾超出容器长度的元素被删除。cout << "v.size() = " << v.size() << endl; // 存放的数据变少cout << "v.capacity() = " << v.capacity() << endl; // 容器大小不变}int main(int argc, char const *argv[]) {test01();return 0;
}

4. vector 插入和删除

函数原型

push_back(const T& x);   // 在容器尾部添加元素
pop_back();              // 删除容器最后一个元素
insert(const_iterator pos, const T& x);  // 在pos位置插入元素x
insert(const_iterator pos, const T& x, int n);  // 在pos位置插入n个元素x
erase(const_iterator pos);  // 删除pos位置的元素
erase(const_iterator start, const_iterator end); // 删除从start到end的元素
clear();  // 删除容器中所有元素
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;void printVector(vector<int> &v){for(vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << " ";}cout << endl;
}void test01() {vector<int> v;// 尾插v.push_back(10);v.push_back(20);v.push_back(30);v.push_back(40);v.push_back(50);printVector(v);// 尾删v.pop_back();printVector(v);// 插入 第一个参数是迭代器,第二个参数是插入的元素v.insert(v.begin(), 100); // 在头部插入printVector(v);// 插入 n 个元素v.insert(v.begin(), 2, 1000);printVector(v);// 删除v.erase(v.begin());printVector(v);// 删除区间v.erase(v.begin(), v.begin() + 2);printVector(v);// 清空cout << "clear" << endl;v.clear();printVector(v);cout << "size: " << v.size() << endl;cout << "capacity: " << v.capacity() << endl;
}int main(int argc, char const *argv[]) {test01();return 0;
}

5 vector 数据存取

函数原型

at(int pos) // 返回索引为pos的数据
operator[](int pos) // 返回索引为pos的数据
front() // 返回容器中第一个数据元素
back() // 返回容器中最后一个数据元素
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;// vector 数据存取void test01() {vector<int> v;for (int i = 0; i < 10; i++) {v.push_back(i);}// at()for(int i = 0; i < v.size(); i++) {cout << v.at(i) << " ";}cout << endl;// operator[]for (int i = 0; i < v.size(); i++){cout << v[i] << " ";}cout << endl;cout << "front: " << v.front() << endl;cout << "back: " << v.back() << endl;
}int main(int argc, char const *argv[]) {test01();return 0;
}

6. vector 互换容器

// 函数原型

 swap(vec); // 交换两个容器的所有元素
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;// vector 互换容器
void printVec(vector<int> &v) {for(vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << " ";}cout << endl;
}// 基本使用
void test01() {vector<int> v1;cout << "交换前" << endl;for (size_t i = 0; i < 5; i++){v1.push_back(i);}printVec(v1);vector<int> v2;for (size_t i = 10; i > 0; i--){v2.push_back(i);}printVec(v2);cout << "交换后" << endl;v1.swap(v2);printVec(v1);printVec(v2);}// 实际用途
// 巧用swap可以收缩内存空间
void test02() {vector<int> v;for(int i = 0; i < 100000; i++) {v.push_back(i);}cout << "v的容量为:" << v.capacity() << endl;cout << "v的大小为:" << v.size() << endl;v.resize(3);cout << "v的容量为:" << v.capacity() << endl;cout << "v的大小为:" << v.size() << endl;// 收缩内存空间vector<int>(v).swap(v); // 匿名对象 当前行执行完毕,立即释放匿名对象cout << "v的容量为:" << v.capacity() << endl;cout << "v的大小为:" << v.size() << endl;}int main(int argc, char const *argv[]) {test02();return 0;
}

7 vector 预留空间

功能描述:减少vector 在动态扩展容量时的扩展次数

函数原型

resever(int len) // 预留len个长度,不初始化元素,不可访问
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;//  vector 预留空间void printVec(vector<int> &v) {for(vector<int>::iterator it = v.begin(); it != v.end(); it++){cout << *it << " ";}cout << endl;
}void test01() {vector<int> v;// v.reserve(100000); // 预留100000个空间,不初始化元素,不可访问int num = 0; // 统计vector扩容的次数int *p = NULL;for (int i = 0; i < 100000; i++){v.push_back(i);if(p != &v[0]){p = &v[0];num++;cout << "capacity = " << v.capacity() << endl;cout << "size = " << v.size() << endl;}}cout << "num = " << num << endl
}int main(int argc, char const *argv[]) {test01();return 0;
}

http://www.ppmy.cn/server/160915.html

相关文章

《鸿蒙 HarmonyOS 应用开发从入门到精通(第 2 版)》学习笔记 ——HarmonyOS 环境搭建之安装DevEco Studio

作为一款开发工具&#xff0c;除了具有基本的代码开发、编译构建及调测等功能外&#xff0c;DevEco Studio还具有如下特点&#xff1a; 高效智能代码编辑&#xff1a;支持Java、XML、ArkTS、JS、C/C等语言的代码高亮、代码智能补齐、代码错误检查、代码自动跳转、代码格式化、…

js高阶-响应式原理

在JavaScript中&#xff0c;响应式原理通常是指一种编程模式&#xff0c;它允许开发者创建能够自动响应数据变化的系统或应用。这种模式在现代前端框架&#xff08;如Vue.js、React等&#xff09;中非常常见&#xff0c;尤其是在数据绑定和UI更新方面。以下是响应式原理的核心概…

leetcode刷题记录(七十二)——146. LRU 缓存

&#xff08;一&#xff09;问题描述 146. LRU 缓存 - 力扣&#xff08;LeetCode&#xff09;146. LRU 缓存 - 请你设计并实现一个满足 LRU (最近最少使用) 缓存 [https://baike.baidu.com/item/LRU] 约束的数据结构。实现 LRUCache 类&#xff1a; * LRUCache(int capacity)…

style标签没有写lang=“scss“引发的 bug 和反思

遇到了一个问题&#xff0c;有一个css样式问题&#xff0c;在 chrome 浏览器上和 16.0 版本以上的 safari 浏览器完全没有问题&#xff0c;但是在 15.3 版本的safari浏览器上就完全乱套了。 一查发现是我的某个 vue 文件中的style标签忘记写 lang"scss" 了&#xf…

以太坊深入解析:概念与原理全面剖析

引言 以太坊&#xff08;Ethereum&#xff09;作为区块链技术的代表性项目之一&#xff0c;自2015年发布以来&#xff0c;迅速成为全球区块链行业的核心基础设施。相比比特币&#xff0c;以太坊不仅支持点对点的价值转移&#xff0c;还引入了智能合约&#xff0c;使其能够承载…

FPGA 开发工作需求明确:关键要点与实践方法

FPGA开发工作需求明确&#xff1a;关键要点与实践方法 一、需求明确的重要性 在FPGA开发领域&#xff0c;明确的需求是项目成功的基石。FPGA开发往往涉及复杂的硬件逻辑设计、高速信号处理以及与其他系统的协同工作。若需求不明确&#xff0c;可能导致开发过程中频繁变更设计…

利用R计算一般配合力(GCA)和特殊配合力(SCA)

前记 一般配合力(General Combining Ability, GCA)和特殊配合力(Specific Combining Ability, SCA)是杂交育种中用于评估亲本组合潜力的重要概念,具体定义和区别如下: 一般配合力(GCA) 定义:GCA是指一个自交系与其他多个自交系杂交时,其杂交后代在某一性状(如产量)…

【GitHub】登录时的2FA验证

一、如何进行2FA认证 1.在你的浏览器中下载 Authenticator身份验证插件 2.使用身份验证器添加凭证 2.1 使用身份验证器扫描验证二维码 选择扫描二维码