C++中using namespace std的作用以及vector数组的使用

news2024/9/23 22:48:28

C++中using namespace std的作用以及vector数组的使用

本文为自我学习记录,主要包括C++中

  1. using namespace std的作用
  2. vector数组的使用

文章目录

  • C++中using namespace std的作用以及vector数组的使用
    • 一、 using namespace std
    • 二、vector数组
      • 2.1 使用 vector<vector<int>> 和 int s[][]定义二维数组区别
      • 2.2 vector数组的插入,删除,修改操作

一、 using namespace std

在一个最简单的helloworld的代码中,我们有使用到一行特殊的代码就是using namespace std,那为什么每次写C++代码时都需要进行使用空间说明呢?

#include <iostream>

//使用命名空间std
using namespace std;
int main(void) {
    int a=10;
    cout << "Hello, world!" << endl;
    cin >> "a= " >> a;
    return 0;
}

using namespace std:这行代码是用来告诉编译器,我们希望在代码中使用std命名空间中的标识符,而不需要在每个标识符前面加上std::前缀。

但是,并不是每个人都喜欢使用using namespace std;,因为它可能导致命名冲突,特别是当不同命名空间中的标识符具有相同的名称时。为了避免这种情况,一些人选择显式地在代码中使用std::前缀,而不是使用using namespace std;

使用空间说明是为了明确指定使用哪个命名空间中的标识符,这样可以提高代码的可读性和可维护性,特别是在大型项目中。虽然在小型项目或示例代码中使用using namespace std;可能更方便,但在实际的生产代码中,最好显式地使用命名空间说明来避免潜在的问题。

二、vector数组

使用 vector 定义一个二维数组,实际上是使用 vector 嵌套 vector 的方式来表示二维数组。这种方式有一些特性:

  1. 动态大小: 使用 vector 嵌套 vector 可以方便地实现动态大小的二维数组。即使在运行时,也可以根据需要动态调整数组的大小,而不必提前知道数组的大小。

  2. 方便的访问: 使用 vector 嵌套 vector 可以方便地通过双重索引访问数组元素。例如,对于二维数组 vector<vector<int>> matrix,可以使用 matrix[i][j] 来访问第 i 行第 j 列的元素。

  3. 灵活的操作: 使用 vector 嵌套 vector 可以方便地进行插入、删除、修改等操作。可以通过调整内部 vector 的大小来实现插入和删除操作,也可以直接修改元素的值。

  4. 内存管理: vector 会自动处理内存管理,包括内存的分配和释放,避免了手动管理内存的复杂性和可能出现的错误。当不再需要使用二维数组时,vector 会自动释放所占用的内存,避免内存泄漏的风险。

总的来说,使用 vector 定义二维数组具有灵活性高、易于操作和内存管理自动化等特性,使得它成为在 C++ 中表示二维数组的一种常用方式。

2.1 使用 vector<vector> 和 int s[][]定义二维数组区别

使用 vector<vector<int>>int s[][] 定义二维数组有一些区别:

  1. 动态大小:

    • vector<vector<int>>:使用 vector 嵌套 vector 定义的二维数组可以动态调整大小,即在运行时可以根据需要添加或删除行和列。
    • int s[][]:使用数组方式定义的二维数组大小是固定的,需要在定义时指定行和列的大小,无法在运行时动态调整大小。
  2. 内存管理:

    • vector<vector<int>>vector 会自动管理内存,包括动态分配和释放内存,避免了手动管理内存的复杂性和可能出现的错误。
    • int s[][]:使用数组方式定义的二维数组需要手动管理内存,包括内存的分配和释放。在堆上动态分配数组需要使用 newdelete,而栈上定义数组大小固定,无法动态释放内存。
  3. 访问方式:

    • vector<vector<int>>:可以使用双重索引方式访问数组元素,即 matrix[i][j]
    • int s[][]:同样可以使用双重索引方式访问数组元素,即 s[i][j]
  4. 复制和传递:

    • vector<vector<int>>:可以直接进行复制和传递,传递的是对象的副本。
    • int s[][]:无法直接进行复制和传递,传递的是指向数组的指针,需要使用指针或引用进行传递。
  5. 易用性和灵活性:

    • vector<vector<int>>:更灵活易用,可以方便地进行插入、删除、修改等操作。
    • int s[][]:操作起来不如 vector 方便,因为需要手动管理内存,且在定义时需要固定大小,无法动态调整。

综上所述,vector<vector<int>> 的方式更加灵活,易于使用和管理,尤其在需要动态调整大小和方便操作时更为方便,而使用数组方式定义的二维数组则更加静态和限制较多。

2.2 vector数组的插入,删除,修改操作

当使用 vector 定义二维数组时,经常需要进行插入、删除、修改等操作。下面我将通过示例代码来详细讲解这些操作:

#include <iostream>
#include <vector>

using namespace std;

int main() {
    // 定义一个二维 vector 数组
    vector<vector<int>> matrix;

    // 插入操作
    // 插入一行数据 {1, 2, 3}
    matrix.push_back({1, 2, 3});
    // 插入一行数据 {4, 5, 6}
    matrix.push_back({4, 5, 6});

    // 输出当前数组
    cout << "Original matrix:" << endl;
    for (const auto& row : matrix) {
        for (int num : row) {
            cout << num << " ";
        }
        cout << endl;
    }

    // 修改操作
    // 将第一行的第二个元素修改为10
    matrix[0][1] = 10;

    // 输出修改后的数组
    cout << "\nMatrix after modification:" << endl;
    for (const auto& row : matrix) {
        for (int num : row) {
            cout << num << " ";
        }
        cout << endl;
    }

    // 删除操作
    // 删除第二行
    matrix.erase(matrix.begin() + 1);

    // 输出删除后的数组
    cout << "\nMatrix after deletion:" << endl;
    for (const auto& row : matrix) {
        for (int num : row) {
            cout << num << " ";
        }
        cout << endl;
    }

    return 0;
}

这段代码演示了以下操作:

  1. 插入操作:使用 push_back() 方法向二维数组末尾插入一行数据。
  2. 修改操作:直接通过双重索引方式修改数组元素的值。
  3. 删除操作:使用 erase() 方法删除指定位置的行。
    输出内容:
    在这里插入图片描述

这些操作可以通过双重索引来访问和修改二维数组中的元素,从而实现插入、删除和修改等功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1545242.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Scikit-Learn K近邻分类

Scikit-Learn K近邻分类 1、K近邻分类1.1、K近邻分类及原理1.2、超参数K1.3、K近邻分类的优缺点2、Scikit-Learn K近邻分类2.1、Scikit-Learn K近邻分类API1、K近邻分类 K近邻是一种常用的分类算法。K近邻在机器学习知识结构中的位置如下: 1.1、K近邻分类及原理 K近邻(K-Near…

SAP ABAP-BOPF基础训练-01简介与架构

1. 介绍-Introduction ① BOPF是什么&#xff1f;BOPF(the Business Object Processing Framework)&#xff1a;业务对象处理框架 提供了一种增量和模块化的方法&#xff0c;以符合企业面向服务体系结构(eSOA)的方式实现业务对象&#xff1b; 部分平台基础层&#xff0c;软件组…

利用flag信号解决LeetCode题库第394题字符串解码问题

394. 字符串解码 中等 给定一个经过编码的字符串&#xff0c;返回它解码后的字符串。 编码规则为: k[encoded_string]&#xff0c;表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。 你可以认为输入字符串总是有效的&#xff1b;输入字符串中没有…

Vue 发送Ajax请求多种方式

1. 发送ajax请求的方式 方案一&#xff1a;jq 的ajax&#xff08;在 vue 中不推荐同时使用&#xff09;方案二&#xff1a;js 原始官方 fetch方法方案三&#xff1a;axios 第三方 2. 方案一 后端视图函数 from rest_framework.viewsets import ViewSet from rest_framework…

HTML(二)

一、表格标签 1.1表格的主要作用 表格主要用于显示、展示数据&#xff0c;因为它可以让数据显示的非常的规整&#xff0c;可读性非常好。特别是后台展示数据的时候&#xff0c;能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的数据表现得很有条理。 1.2 表格的…

yolov5交互式界面 V5.0-6.0版本通用界面-yolo-pyqt-gui(通用界面制作+代码)

往期热门博客项目回顾&#xff1a; 计算机视觉项目大集合 改进的yolo目标检测-测距测速 路径规划算法 图像去雨去雾目标检测测距项目 交通标志识别项目 yolo系列-重磅yolov9界面-最新的yolo 姿态识别-3d姿态识别 深度学习小白学习路线 yolo GUI OYQT界面 YOLOv5…

yarn按包的时候报错 ../../../package.json: No license field

运行 yarn config list 然后运行 yarn config set strict-ssl false 之后yarn就成功了

【文献分享】强各向异性扩散方程的高效高阶数值求解器

An efficient high-order numerical solver for diffusion equations with strong anisotropy DOI: 10.1016/j.cpc.2022.108333 强各向异性扩散方程的高效高阶数值求解器 在本文中&#xff0c;我们提出了一种内部惩罚不连续 Galerkin 有限元方案&#xff0c;用于解决聚变应…

低代码平台与自动化软件开发的关系

引言 随着信息技术的不断发展&#xff0c;软件开发领域也在不断演进。在追求更高效、更快速的软件开发过程中&#xff0c;低代码平台和自动化软件开发技术日益受到关注。低代码平台以其可视化开发界面和快速构建应用的能力&#xff0c;为非专业开发人员提供了参与软件开发的机会…

2016年认证杯SPSSPRO杯数学建模C题(第二阶段)如何有效的抑制校园霸凌事件的发生全过程文档及程序

2016年认证杯SPSSPRO杯数学建模 C题 如何有效的抑制校园霸凌事件的发生 原题再现&#xff1a; 近年来&#xff0c;我国发生的多起校园霸凌事件在媒体的报道下引发了许多国人的关注。霸凌事件对学生身体和精神上的影响是极为严重而长远的&#xff0c;因此对于这些情况我们应该…

win11安装不符合要求怎么办

安装win11不符合要求怎么办?安装Win11需要一定的配置支持&#xff0c;比如42位cpu、464GB内存、9寸以上的屏幕&#xff0c;以及需要TPM(受信任的安全模块)机制等要求。其中很多用户受限于TPM模块的条件&#xff0c;在检测更新时系统提示缺少TPM&#xff0c;以致升级失败。 可能…

阿里云对象存储OSS入门

阅读目录 一、阿里云OSS的使用 1、OSS是什么&#xff1f;2、OSS的使用 二、阿里云OSS的使用三、图床的搭建四&#xff1a;图床绑定阿里云OSS 编写不易&#xff0c;如果我的文章对你有帮助的话&#xff0c;麻烦小伙伴还帮忙点个赞再走&#xff01; 如果有小伙伴觉得写的啰嗦&am…

‘npm‘ 不是内部或外部命令,也不是可运行的程序

npm认识三年了&#xff0c;今天才知道这是node.js的命令 也就是说&#xff0c;想要在cmd里面运行 npm 命令&#xff0c;但就的安装node.js 1. node.js安装 没有安装包的先下载安装包&#xff1a;下载 | Node.js 中文网 (nodejs.cn) 下载之后双击打开&#xff0c;一路安装确…

【冥想X理工科思维】场景11:多任务并行快让我抑郁了!

冥想音频合集&#xff1a;职场解压冥想音频 压力场景&#xff1a; 我每天都面对需要同时处理多个紧急任务的压力&#xff0c;感觉整个人都快抑郁了&#xff0c;如何通过冥想来集中精力&#xff0c;缓解抑郁&#xff1f; 点击看大图&#xff1a; 详细说明&#xff1a; 接下来是…

Qt实现简易的多线程TCP服务器(附源码)

目录 一.UI界面的设计 二.服务器的启动 三.实现自定义的TcpServer类 1.在widget中声明自定义TcpServer类的成员变量 2.在TcpServer的构造函数中对于我们声明的m_widget进行初始化&#xff0c;m_widget我们用于后续的显示消息等&#xff0c;说白了就是主界面的更新显示等 …

离线安装vscode插件

使用vsix 1.从vscode插件市场All categories Extensions - Visual Studio Marketplace下载需要的vscode插件&#xff0c;拿Prettier - Code formatter插件举例 查看相应版本信息并选择适合的版本进行下载&#xff0c;建议选择最新版本&#xff0c;一般比较稳定 2.将已经下载好…

【[NOIP1999 普及组] Cantor 表】

题目描述 现代数学的著名证明之一是 Georg Cantor 证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的&#xff1a; 我们以 Z 字形给上表的每一项编号。第一项是 1 / 1 1/1 1/1&#xff0c;然后是 1 / 2 1/2 1/2&#xff0c; 2 / 1 2/1 2/1&#xff0c; 3 / 1 3/1…

如何理解Java不可变集合?有什么使用场景?

目录 1. 怎样理解不可变集合&#xff1f; 2. 不可变集合的应用场景 3. 不可变集合的创建和使用&#xff1f; 1. 怎样理解不可变集合&#xff1f; 温馨提示&#xff1a;JDK8版本中不支持不可变集合&#xff0c;建议升级至JDK11版本以上&#xff01;&#xff01;&#xff01; …

FPGA时钟资源详解(4)——区域时钟资源

FPGA时钟系列文章总览&#xff1a;FPGA原理与结构&#xff08;14&#xff09;——时钟资源https://ztzhang.blog.csdn.net/article/details/132307564 目录 一、概述 二、Clock-Capable I/O 三、I/O 时钟缓冲器 —— BUFIO 3.1 I/O 时钟缓冲器 3.2 BUFIO原语 四、区域时钟…

SpringBoot+Vue前后端分离项目在Linux系统中基于Docker打包发布,并上传镜像到阿里镜像私仓

文章目录 SpringBootVue前后端分离项目在Linux系统中基于Docker打包发布&#xff0c;并上传镜像到阿里镜像私仓一、Java项目基于Docker打包发布1.打包应用&#xff0c;将打好的jar包放到我们的linux系统中2.新建dockerfile3.打包镜像4.测试运行5.上传镜像到阿里云免费私仓 二、…