当前位置: 首页 > wzjs >正文

加强人社网站建设合肥企业网站建设公司

加强人社网站建设,合肥企业网站建设公司,网站繁体和中文这么做,wordpress会员关注一、std::vector (1)vector与其适用场景 作用: std::vector 是 C 标准模板库(STL)中的动态数组,它的大小可以动态增长或缩小,并且提供了自动内存管理和丰富的操作函数。 特点: 自…

一、std::vector

(1)vector与其适用场景

作用:
std::vector 是 C++ 标准模板库(STL)中的动态数组,它的大小可以动态增长或缩小,并且提供了自动内存管理和丰富的操作函数

特点:

  • 自动管理内存(不需要手动 new/delete)。
  • 动态扩展(不像普通数组需要固定大小)。
  • 支持随机访问O(1) 复杂度)。
  • 丰富的内置函数(插入、删除、查找、排序等)。

适用场景:

  • 适用于需要动态增长的数组
  • 适用于需要快速访问(O(1))的情况
  • 适用于需要内存自动管理的情况

包含头文件

#include <vector>

(2)vector vs 数组

特性vector数组 (int arr[])
大小动态调整固定大小
内存管理自动手动管理
元素访问O(1)O(1)
安全性at() 提供边界检查访问越界可能崩溃
功能具备 insert, erase, sort 等功能需要手写

二、std::vector 的创建

函数作用
vector<T> vec;默认构造一个空vector
vector<T> vec(n);创建一个大小为nvector,默认初始化元素
vector<T> vec(n, val);创建一个大小为n,值为valvector
vector<T> vec = {val1, val2, ...};使用列表初始化
vector<T> vec(other_vec);拷贝构造
vector<T> vec(other_vec.begin(), other_vec.end());迭代器范围构造

(1) 定义 vector

示例:

#include <iostream>
using namespace std;
#include <vector>
#include <algorithm>void printVector(const vector<int> v)
{for (int x : v){cout << x << " ";}cout << endl;
}int main() {vector<int> v1;              // 创建空 vectorvector<int> v2(5);           // 创建包含 5 个元素的 vector,默认值为 0vector<int> v3(5, 100);      // 创建 5 个 100vector<int> v4 = {1, 2, 3};  // 直接初始化vector<int> v5(v4);          // 复制另一个 vectorprintVector(v1);printVector(v2);printVector(v3);printVector(v4);printVector(v5);system("pause");return 0;
}

(2) 向 vector 添加元素

示例:

#include <iostream>
using namespace std;
#include <vector>int main() {vector<int> v;v.push_back(10);   // 添加元素v.push_back(20);v.emplace_back(30); // 效率更高for (int x : v){cout << x << " ";}cout << endl;system("pause");return 0;
}

注意:

  • push_back:先构造一个临时对象,然后拷贝/移动到容器中。
  • emplace_back直接在容器的内存空间中构造对象,避免临时对象的创建和拷贝/移动,提高效率

(3) 访问 vector 元素

函数作用
vec[i]索引访问,无越界检查
vec.at(i)索引访问,带越界检查(越界抛异常
vec.front()返回第一个元素
vec.back()返回最后一个元素
vec.data()返回指向底层数组的指针

示例:

#include <iostream>
using namespace std;
#include <vector>int main() {vector<int> v;v.push_back(10);   // 添加元素v.push_back(20);v.emplace_back(30); // 效率更高cout << v[0] << endl;       // 直接访问cout << v.at(1) << endl;    // 安全访问,带边界检查cout << v.front() << endl;  // 获取第一个元素cout << v.back() << endl;   // 获取最后一个元素system("pause");return 0;
}

三、遍历 vector

(1) 使用 for 循环

示例:

#include <iostream>
using namespace std;
#include <vector>int main() {vector<int> v = {10, 20, 30, 40, 50};  // 直接初始化for (int i = 0; i < v.size(); i++){cout << v[i] << " ";}cout << endl;system("pause");return 0;
}

(2) 使用范围 for

作用:

  • C++11 引入了范围基 for 循环(range-based for loop),用于简洁、直观地遍历容器(如 vector、list、map 等)。

语法:

for (元素类型 变量 : 容器) {// 操作变量
}

遍历方式:

  • 值遍历for (auto x : container) —— 拷贝元素(适用于基本类型)。
  • 引用遍历for (auto& x : container) —— 避免拷贝,提高效率。
  • 常引用遍历for (const auto& x : container) —— 保护数据,防止修改。

示例:

#include <iostream>
using namespace std;
#include <vector>int main() {vector<int> v = {10, 20, 30, 40, 50};  // 直接初始化for (int x : v) {cout << x << " ";}cout << endl;system("pause");return 0;
}

(3) 使用迭代器

函数作用
vec.begin()返回指向首元素的迭代器
vec.end()返回指向尾后元素的迭代器
vec.rbegin()返回指向末元素的反向迭代器
vec.rend()返回指向首元素前的反向迭代器

示例:

#include <iostream>
using namespace std;
#include <vector>int main() {vector<int> v = {10, 20, 30, 40, 50};  // 直接初始化for (auto it = v.begin(); it != v.end(); ++it){cout << *it << " ";}cout << endl;system("pause");return 0;
}

四、 std::vector 的常用操作

(1) 插入、删除

函数作用
vec.push_back(val)尾部添加元素
vec.emplace_back(args...)尾部原地构造元素(比push_back更高效)
vec.insert(pos, val)pos位置插入val
vec.insert(pos, n, val)pos位置插入nval
vec.insert(pos, first, last)pos位置插入迭代器范围的元素
vec.erase(pos)删除pos位置的元素
vec.erase(first, last)删除[first, last)范围内的元素
vec.pop_back()删除尾部元素
vec.clear()清空所有元素

示例:

#include <iostream>
using namespace std;
#include <vector>void printVector(vector<int> v)
{for (auto it = v.begin(); it != v.end(); ++it){cout << *it << " ";}cout << endl;
}int main() {vector<int> v = {1, 2, 3, 4};printVector(v);// 插入元素v.insert(v.begin() + 2, 100); // 在索引 2 位置插入 100, (1,2,100,3,4)printVector(v);// 删除元素v.erase(v.begin());           // 删除第一个元素 (2,100,3,4)printVector(v);v.erase(v.begin() + 2);       // 删除索引 2 处的元素 (2,100,4)printVector(v);// 清空 vectorv.clear();printVector(v);system("pause");return 0;
}

(2) vector 的大小

函数作用
vec.size()返回当前元素数量
vec.empty()判断是否为空
vec.capacity()返回当前分配的存储容量
vec.shrink_to_fit()减少capacity使其等于size
vec.reserve(n)预分配至少n个元素的空间
vec.resize(n)调整大小为n,新元素默认构造
vec.resize(n, val)调整大小为n,新元素初始化为val

示例:

#include <iostream>
using namespace std;
#include <vector>void printVector(vector<int> v)
{for (auto it = v.begin(); it != v.end(); ++it){cout << *it << " ";}cout << endl;
}int main() {vector<int> v = {1, 2, 3, 4};cout << v.size() << endl;     // 获取元素个数cout << v.capacity() << endl; // 获取当前容量cout << v.empty() << endl;    // 是否为空v.resize(10);      // 重新设定大小,默认填充 0printVector(v);v = {1, 2, 3, 4};v.resize(10, 5);   // 填充 5printVector(v);system("pause");return 0;
}

(3)vector 的排序

函数作用
vec.size()返回当前元素数量
sort(vec.begin(), vec.end())排序
reverse(vec.begin(), vec.end())逆序
find(vec.begin(), vec.end(), val)查找元素
binary_search(vec.begin(), vec.end(), val)二分查找(需排序)

示例:

#include <iostream>
using namespace std;
#include <vector>
#include <algorithm>void printVector(vector<int> v)
{for (auto it = v.begin(); it != v.end(); ++it){cout << *it << " ";}cout << endl;
}int main() {vector<int> v = { 3, 1, 4, 5, 2 };printVector(v);sort(v.begin(), v.end());  // 升序排序printVector(v);reverse(v.begin(), v.end());  // 逆序printVector(v);system("pause");return 0;
}

(4) 交换 vector

示例:

#include <iostream>
using namespace std;
#include <vector>void printVector(vector<int> v)
{for (auto it = v.begin(); it != v.end(); ++it){cout << *it << " ";}cout << endl;
}int main() {vector<int> a = {1, 2, 3};vector<int> b = {4, 5, 6};cout << "交换前: " << endl;printVector(a);printVector(b);a.swap(b);  // 交换 a 和 b 的内容cout << "交换后: " << endl;printVector(a);printVector(b);system("pause");return 0;
}

注意:
a.swap(b); 交换 a 和 b 的所有元素,避免数据拷贝,提高性能。


文章转载自:

http://coebO55x.qnkLx.cn
http://EhaXwC0I.qnkLx.cn
http://J8eWtREf.qnkLx.cn
http://kbvFla2Z.qnkLx.cn
http://XEdM3Sbw.qnkLx.cn
http://UUriIU2s.qnkLx.cn
http://F6NhSc9R.qnkLx.cn
http://y23Y5O7C.qnkLx.cn
http://I7yCD9F2.qnkLx.cn
http://pCjJ5Y70.qnkLx.cn
http://N8ilLWdz.qnkLx.cn
http://lAJqclrt.qnkLx.cn
http://2l6uoh5S.qnkLx.cn
http://0W6VB1el.qnkLx.cn
http://e3mE0jUE.qnkLx.cn
http://x1BQkLIA.qnkLx.cn
http://hHZb0FVR.qnkLx.cn
http://aEZcj6oS.qnkLx.cn
http://1JLIX5rs.qnkLx.cn
http://8BY0RgYl.qnkLx.cn
http://s1TjkNEe.qnkLx.cn
http://UmhEGSFU.qnkLx.cn
http://isAEnruv.qnkLx.cn
http://u34eSHZZ.qnkLx.cn
http://HRQ94SKn.qnkLx.cn
http://pIhViFXb.qnkLx.cn
http://nkdSS4mb.qnkLx.cn
http://OmUYQ4VB.qnkLx.cn
http://i9jOCc3v.qnkLx.cn
http://9CZPZy1t.qnkLx.cn
http://www.dtcms.com/wzjs/629854.html

相关文章:

  • seo网站三要素怎么做wordpress个性化后台
  • 化妆品销售网站开发与设计产品设计公司推荐
  • 和淘宝同时做电商的网站光明网站建设
  • 网站 建设ppt代加工手工活外发免费 来料加工
  • 做贷款网站犯法吗长沙网站建设外包
  • 软件ui设计怎么做网站找图做素材啥网站好
  • 在58做网站推广有效果吗国外知名网站
  • 网站怎么建设与管理WordPress建站布置
  • 上海自适应网站开发挣钱最快的app
  • 高端网站建设制作设计分销电商
  • 手机中国建设银行网站h5免费制作平台火蚁邀请函
  • 合肥 做网站的qq企业邮箱注册申请
  • 众筹网站搭建深圳定制钻戒哪里好推荐
  • 临淄网站建设价格网站开发前台后台
  • 怎么建设网站赚钱手机广告创意设计大赛
  • 建设网站建站镇江网站建设
  • 做网站的经验一个公司做两个网站的多吗
  • 七宝做网站苏州网站建设推广服务
  • 网站是否必须做可信网站认证郑州有免费建网站的公司吗
  • 网站建设cms系统专业建站公司联系方式
  • 做搜狗pc网站优化模板号专注于网站
  • 网站开发和网页设计遵义网站建设公司有哪些
  • 江宁做网站网站地图制作方法
  • 网站页面设计工作流程注册网站需要多少
  • 招聘网站做招聘顾问网站建设服务费的摊销期限
  • 使用动易模版制作网站课程建设网站设计源码
  • Seo与网站推广的技术对比seo优化易下拉排名
  • 个人备案网站可以做产品推广溧阳市建设工程质量监督站网站
  • 重庆璧山网站制作报价聊城专业网站建设
  • 现在能用的网站宁波建站模板源码