C++笔记之vector的成员函数swap()和data()

C++笔记之vector的成员函数swap()和data()

标准C++中的std::vector类确实有swap()data()这两个成员函数。下面是它们的简要描述:

  1. swap(): std::vectorswap()成员函数用于交换两个向量的内容,实现了高效的交换操作,不需要复制向量的元素。这对于在某些情况下高效地交换两个向量的内容非常有用。
cpp 复制代码
std::vector<T> v1, v2;
// 填充 v1 和 v2

v1.swap(v2); // 交换 v1 和 v2 的内容
  1. data(): std::vectordata()成员函数返回一个指向向量数据的指针。这个指针可以用于访问向量的元素。请注意,data()返回的指针是指向连续内存块的首地址,但要小心不要访问越界的元素。
cpp 复制代码
std::vector<T> v;
// 填充 v

T* ptr = v.data(); // 获取指向向量数据的指针

// 使用 ptr 访问向量的元素

请注意,这些函数是C++标准库的一部分,因此在标准C++中都是可用的。但是,不同版本的C++标准库可能会有一些差异,因此在使用时请查看您所使用的C++标准库版本的文档以确保正确使用这些函数。

示例1:使用swap()函数交换两个std::vector对象的内容

cpp 复制代码
#include <iostream>
#include <vector>

int main() {
    std::vector<int> v1 = {1, 2, 3};
    std::vector<int> v2 = {4, 5, 6};

    std::cout << "v1: ";
    for (int num : v1) {
        std::cout << num << " ";
    }
    std::cout << "\n";

    std::cout << "v2: ";
    for (int num : v2) {
        std::cout << num << " ";
    }
    std::cout << "\n";

    // 使用 swap() 交换 v1 和 v2 的内容
    v1.swap(v2);

    std::cout << "After swapping:\n";
    std::cout << "v1: ";
    for (int num : v1) {
        std::cout << num << " ";
    }
    std::cout << "\n";

    std::cout << "v2: ";
    for (int num : v2) {
        std::cout << num << " ";
    }
    std::cout << "\n";

    return 0;
}

运行

示例2:使用data()函数获取std::vector数据的指针

cpp 复制代码
#include <iostream>
#include <vector>

int main() {
    std::vector<double> v = {1.1, 2.2, 3.3, 4.4, 5.5};

    double* ptr = v.data();

    std::cout << "Elements in v using data(): ";
    for (std::size_t i = 0; i < v.size(); ++i) {
        std::cout << ptr[i] << " ";
    }
    std::cout << "\n";

    return 0;
}

运行

这两个程序分别演示了swap()data()函数的用法,第一个程序交换了两个向量的内容,第二个程序使用data()函数获取向量数据的指针并访问向量的元素。

相关推荐
航Hang*3 分钟前
网络安全技术基础——第3章:网络攻击技术
运维·网络·笔记·安全·web安全·php
asyxchenchong8886 分钟前
农业系统模拟APSIM全流程详解(气象/土壤/碳氮平衡/NG版本)附R批量处理代码
开发语言·r语言
跟着珅聪学java8 分钟前
在 Java 中处理 JSON 去除空 children数组,可以使用 Jackson 库。这里有几种实现方式
开发语言·windows·python
计算机安禾8 分钟前
【数据结构与算法】第33篇:交换排序(二):快速排序
c语言·开发语言·数据结构·数据库·算法·矩阵·排序算法
William Dawson10 分钟前
Java 后端高频 20 题超详细解析 ①
java·开发语言
洛水水11 分钟前
高性能网络编程:io_uring vs epoll、QPS测试工具实现与10道网络面试题解析
c++·udp·tcp·io_uring
嵌入式×边缘AI:打怪升级日志11 分钟前
Linux 常用命令学习笔记(续):查找、压缩、vi 编辑器与其他命令
linux·笔记·学习
lly20240612 分钟前
PHP 魔术常量
开发语言
沙雕不是雕又菜又爱玩12 分钟前
leetcode第12、13、14、15题(C++)
c++·算法·leetcode
Evand J13 分钟前
【MATLAB例程分享】三维非线性目标跟踪,观测为:距离+方位角+俯仰角,使用无迹卡尔曼滤波(UKF)与RTS平滑,高精度定位
开发语言·matlab·目标跟踪