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

std::vector c++

std::vector是 C++标准库中的一个非常灵活的动态数组容器,它提供了多种赋值方式。我会用简单易懂的方式,结合一些示例,来介绍这些赋值方法。

1.使用std::vector的构造函数赋值

方法 1:直接初始化
你可以直接在定义时初始化std::vector,使用大括号{}或者std::initializer_list

std::vector<int> vec1 = {1, 2, 3, 4, 5}; // 使用大括号初始化
std::vector<int> vec2{10, 20, 30}; // 使用大括号初始化(C++11 及以上)

方法 2:指定大小和初始值
你可以指定std::vector的大小,并给所有元素赋相同的初始值。

std::vector<int> vec3(5, 0); // 创建一个大小为 5,所有元素初始化为 0 的 vector
std::vector<int> vec4(3, 10); // 创建一个大小为 3,所有元素初始化为 10 的 vector

方法 3:从另一个容器复制
你可以从另一个std::vector或其他兼容的容器复制数据。

std::vector<int> vec5 = vec1; // 从 vec1 复制
std::vector<int> vec6(vec2.begin(), vec2.end()); // 从 vec2 的迭代器范围复制

2.使用assign方法赋值
assign方法可以用来替换std::vector中的所有元素。

std::vector<int> vec7;
vec7.assign(3, 100); // 用 3 个 100 替换 vec7 的内容
vec7.assign(vec1.begin(), vec1.end()); // 用 vec1 的内容替换 vec7 的内容

3.使用push_backemplace_back动态添加元素
push_backemplace_back是动态添加元素的常用方法。

push_back
push_back会先构造一个临时对象,然后将其复制到std::vector中。

std::vector<int> vec8;
vec8.push_back(1); // 添加元素 1
vec8.push_back(2); // 添加元素 2

emplace_back
emplace_back更高效,因为它直接在std::vector中构造对象,避免了临时对象的创建和复制。

std::vector<int> vec9;
vec9.emplace_back(3); // 直接构造元素 3
vec9.emplace_back(4); // 直接构造元素 4

4.使用insert方法插入元素
insert方法可以在指定位置插入一个元素或一个范围的元素。

插入单个元素

std::vector<int> vec10 = {1, 2, 3};
vec10.insert(vec10.begin() + 1, 10); // 在索引 1 的位置插入元素 10
// 结果:vec10 = {1, 10, 2, 3}

插入多个元素

std::vector<int> vec11 = {1, 2, 3};
vec11.insert(vec11.end(), {4, 5, 6}); // 在末尾插入多个元素
// 结果:vec11 = {1, 2, 3, 4, 5, 6}

5.使用resize方法调整大小
resize方法可以调整std::vector的大小,并用指定的值填充新元素(如果需要)。

std::vector<int> vec12 = {1, 2, 3};
vec12.resize(5, 100); // 调整大小为 5,新元素用 100 填充
// 结果:vec12 = {1, 2, 3, 100, 100}

6.使用swap方法交换内容
swap方法可以交换两个std::vector的内容。

std::vector<int> vec13 = {1, 2, 3};
std::vector<int> vec14 = {4, 5, 6};
vec13.swap(vec14); // 交换 vec13 和 vec14 的内容
// 结果:vec13 = {4, 5, 6}, vec14 = {1, 2, 3}

7.使用clear方法清空内容
clear方法可以清空std::vector的所有元素,但不会释放内存。

std::vector<int> vec15 = {1, 2, 3};
vec15.clear(); // 清空 vec15 的内容
// 结果:vec15 = {}

总结
std::vector提供了多种赋值和操作方式,可以根据具体需求选择合适的方法:

• 构造函数:直接初始化或从其他容器复制。

assign:替换整个内容。

push_backemplace_back:动态添加元素。

insert:在指定位置插入元素。

resize:调整大小并填充新元素。

swap:交换两个std::vector的内容。

clear:清空内容。
empty:检查std::vector是否为空,即是否没有任何元素。如果向量为空,它返回true;否则返回false

std::vector提供了empty()函数。这个函数用来检查std::vector是否为空,即是否没有任何元素。如果向量为空,它返回true;否则返回false

empty()函数的用法

语法

bool empty() const;

• 返回值:如果std::vector为空(即没有元素),返回true;否则返回false

示例代码
以下是一个简单的示例,展示如何使用empty()函数:

#include <iostream>
#include <vector>int main() {std::vector<int> vec;// 检查向量是否为空if (vec.empty()) {std::cout << "The vector is empty." << std::endl;} else {std::cout << "The vector is not empty." << std::endl;}// 向向量中添加元素vec.push_back(1);vec.push_back(2);// 再次检查向量是否为空if (vec.empty()) {std::cout << "The vector is empty." << std::endl;} else {std::cout << "The vector is not empty." << std::endl;}return 0;
}

输出结果

The vector is empty.
The vector is not empty.

empty()函数的效率
empty()函数的效率非常高,因为它只是简单地检查向量的大小是否为零。它的时间复杂度是O(1),这意味着它几乎瞬间就能完成检查。

size()的比较
虽然你可以通过检查size()是否为零来判断向量是否为空,但使用empty()更加直观和高效。例如:

if (vec.size() == 0) {std::cout << "The vector is empty." << std::endl;
} else {std::cout << "The vector is not empty." << std::endl;
}

虽然这种方式也能达到相同的效果,但empty()更简洁,也更符合 C++的习惯。

总结
std::vectorempty()函数是一个非常有用的工具,用于快速检查向量是否为空。它简单、高效,是处理std::vector时的推荐方法。

希望这个解释对你有帮助!如果有任何问题,欢迎随时问我哦。

http://www.xdnf.cn/news/6489.html

相关文章:

  • LeetCode 热题 100 1.两数之和
  • 竞品分析是什么,包括哪些内容?AI竞品分析生成器推荐!
  • 20250515让飞凌的OK3588-C的核心板在Linux R4下适配以太网RTL8211F-CG为4线百兆时的接线图
  • VMware中快速安装与优化Ubuntu全攻略
  • 28、动画魔法圣典:Framer Motion 时空奥义全解——React 19 交互动效
  • string(c++)
  • 如何在 Visual Studio Code 中克隆 GitHub 上的 Git 仓库?
  • Java并发编程面试题总结
  • 从管理痛点破局:安科瑞预付费系统赋能高校智慧水电
  • 最优化方法Python计算:有约束优化应用——线性不可分问题支持向量机
  • Java集合框架
  • Python解析Excel入库如何做到行的拆分
  • mysql 基础复习-安装部署、增删改查 、视图、触发器、存储过程、索引、备份恢复迁移、分库分表
  • 五件应该被禁止自行托管的事情(5 Things That Should Be Illegal to Self Host)
  • 【MySQL】基础知识
  • 线程的两种实现方式
  • 云服务模型深度解析:IaaS、PaaS 和 SaaS
  • DevExpressWinForms-TreeList-基础概念介绍
  • 《Java 大视界——Java 大数据在智能电网分布式能源协同调度中的应用与挑战》
  • 面试题:请解释Java中的垃圾回收机制(Garbage Collection, GC),并讨论不同的垃圾回收算法及其优缺点
  • 涨薪技术|0到1学会性能测试第65课-SQL捕获阻塞事件
  • HashSet
  • python打卡打印26
  • Github 2025-05-15 Go开源项目日报 Top10
  • 基于IBM BAW的Case Management进行项目管理示例
  • 单物理机上部署多个TaskManager与调优 Flink 集群
  • 【GESP】C++三级模拟题 luogu-B3849 [GESP样题 三级] 进制转换
  • MCP Server On FC 之旅2: 从 0 到 1 - MCP Server 市场构建与存量 OpenAPI 转 MCP Server
  • AWS Elastic Beanstalk控制台部署Spring极简工程
  • 小刚说C语言刷题—1088求两个数M和N的最大公约数