【C++STL入门】vector查、改、交换

简介: 【C++STL入门】vector查、改、交换

前言


一、查


在C++中,使用vector进行查找操作可以分为两类:输出全部和输出单个元素。下面将详细介绍这些操作及其示例代码。


1.1 输出全部

迭代器

使用迭代器可以遍历vector中的所有元素并进行输出。

示例代码:

#include <iostream>
#include <vector>
int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    // 使用迭代器进行输出
    for (std::vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {
        std::cout << *it << " ";
    }
    return 0;
}

4ffd54f793294fffb0ab6b0983e902ee.png

下标运算

使用下标运算符可以通过索引访问vector中的元素并进行输出。

示例代码:

#include <iostream>
#include <vector>
int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    // 使用下标运算符进行输出
    for (int i = 0; i < vec.size(); ++i) {
        std::cout << vec[i] << " ";
    }
    return 0;
}


3500e65881e046ae88a2628a56aa3664.png

for_each函数

使用for_each函数可以对vector中的每个元素执行相同的操作进行输出。

示例代码:

#include <iostream>
#include <vector>
#include <algorithm>
void printElement(int element) {
    std::cout << element << " ";
}
int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    // 使用for_each函数进行输出
    std::for_each(vec.begin(), vec.end(), printElement);
    return 0;
}


040ca8c8a34d48418b51fab0ea66489c.png


1.2 输出单个元素

at()函数

使用at()函数可以通过索引访问vector中的单个元素并进行输出。at()函数提供了边界检查,可以确保索引在有效范围内。

示例代码:

#include <iostream>
#include <vector>
int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    // 输出第三个元素
    std::cout << vec.at(2) << std::endl;
    return 0;
}


8e913d17d7694c1a91f7fc5ba7a2085a.png


[] 下标运算

使用[]下标运算符同样可以通过索引访问vector中的单个元素并进行输出。但是,与at()函数不同的是,使用[]下标运算符时不会进行边界检查,因此请确保索引在有效范围内。

示例代码:

#include <iostream>
#include <vector>
int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    // 输出第三个元素
    std::cout << vec[2] << std::endl;
    return 0;
}


fd56f89b0ae7464e9d272d23a10a6022.png


back()函数

使用back()函数可以获取vector中的最后一个元素并进行输出。

示例代码:

#include <iostream>
#include <vector>
int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    // 输出最后一个元素
    std::cout << vec.back() << std::endl;
    return 0;
}


052ed3f1fdf84642b37fb157ce848b32.png

以上是使用vector进行查找操作的示例代码,它们可以帮助您了解如何使用不同的方法来输出全部或单个元素。请根据实际需求选择适合的方法。


二、改


assign函数

1、void assign( input_iterator start, input_iterator end );

功能:将vector中的元素替换为使用迭代器范围内的元素。

参数:start是指向输入范围起始位置的迭代器,end是指向输入范围末尾位置的迭代器。

返回值:无。

示例代码:

#include <iostream>
#include <vector>
#include <iterator>
int main() {
    std::vector<int> vec = {1, 2, 3};
    std::vector<int> newElements = {4, 5, 6};
    vec.assign(newElements.begin(), newElements.end());
    // 输出vector中的元素
    for (int num : vec) {
        std::cout << num << " ";
    }
    return 0;
}

47d565e751af45418618afa7cbdc1136.png

输出结果:4 5 6

e9dfbdd0811e4affbdf763846ddd7fdf.png

2、void assign( size_type num, const T &val );

功能:将vector中的元素替换为指定数量的相同值。

参数:num是要生成的元素数量,val是要分配给每个元素的值。

返回值:无。

示例代码:

#include <iostream>
#include <vector>
int main() {
    std::vector<int> vec = {1, 2, 3};
    vec.assign(4, 0);
    // 输出vector中的元素
    for (int num : vec) {
        std::cout << num << " ";
    }
    return 0;
}


e9dfbdd0811e4affbdf763846ddd7fdf.png

输出结果:0 0 0 0


三、交换


swap函数

1、 void swap( vector &from );

功能:交换两个vector的内容。

参数:from是另一个vector,将与当前vector互换元素。

返回值:无。

示例代码:

#include <iostream>
#include <vector>
int main() {
    std::vector<int> vec1 = {1, 2, 3};
    std::vector<int> vec2 = {4, 5, 6};
    vec1.swap(vec2);
    // 输出交换后的vector中的元素
    std::cout << "vec1: ";
    for (int num : vec1) {
        std::cout << num << " ";
    }
    std::cout << std::endl;
    std::cout << "vec2: ";
    for (int num : vec2) {
        std::cout << num << " ";
    }
    return 0;
}


5840e1168bc54418acdbdfd3c933225a.png


输出结果:

vec1: 4 5 6
vec2: 1 2 3

总结


在本文中,我们讨论了如何使用vector进行查找和修改操作。我们介绍了使用循环和迭代器进行遍历,使用下标运算符和for_each函数输出全部元素的方法。我们还了解了如何使用at()函数进行边界检查和使用back()函数获取最后一个元素。这些方法可以帮助您有效地操作和管理vector中的数据。Vector是C++ STL中的一个重要容器,掌握它的基本用法对于开发高效的C++程序非常关键。


希望本文对您理解vector的基本操作和使用有所帮助。祝您在使用C++编程时取得更多的成功!

相关文章
|
7月前
|
编译器 C++ 容器
【c++丨STL】基于红黑树模拟实现set和map(附源码)
本文基于红黑树的实现,模拟了STL中的`set`和`map`容器。通过封装同一棵红黑树并进行适配修改,实现了两种容器的功能。主要步骤包括:1) 修改红黑树节点结构以支持不同数据类型;2) 使用仿函数适配键值比较逻辑;3) 实现双向迭代器支持遍历操作;4) 封装`insert`、`find`等接口,并为`map`实现`operator[]`。最终,通过测试代码验证了功能的正确性。此实现减少了代码冗余,展示了模板与仿函数的强大灵活性。
176 2
|
7月前
|
存储 算法 C++
【c++丨STL】map/multimap的使用
本文详细介绍了STL关联式容器中的`map`和`multimap`的使用方法。`map`基于红黑树实现,内部元素按键自动升序排列,存储键值对,支持通过键访问或修改值;而`multimap`允许存在重复键。文章从构造函数、迭代器、容量接口、元素访问接口、增删操作到其他操作接口全面解析了`map`的功能,并通过实例演示了如何用`map`统计字符串数组中各元素的出现次数。最后对比了`map`与`set`的区别,强调了`map`在处理键值关系时的优势。
344 73
|
4月前
|
存储 安全 编译器
c++入门
c++作为面向对象的语言与c的简单区别:c语言作为面向过程的语言还是跟c++有很大的区别的,比如说一个简单的五子棋的实现对于c语言面向过程的设计思路是首先分析解决这个问题的步骤:(1)开始游戏(2)黑子先走(3)绘制画面(4)判断输赢(5)轮到白子(6)绘制画面(7)判断输赢(8)返回步骤(2) (9)输出最后结果。但对于c++就不一样了,在下五子棋的例子中,用面向对象的方法来解决的话,首先将整个五子棋游戏分为三个对象:(1)黑白双方,这两方的行为是一样的。(2)棋盘系统,负责绘制画面。
48 0
|
8月前
|
存储 缓存 C++
C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程
C++ 标准模板库(STL)提供了一组功能强大的容器类,用于存储和操作数据集合。不同的容器具有独特的特性和应用场景,因此选择合适的容器对于程序的性能和代码的可读性至关重要。对于刚接触 C++ 的开发者来说,了解这些容器的基础知识以及它们的特点是迈向高效编程的重要一步。本文将详细介绍 C++ 常用的容器,包括序列容器(`std::vector`、`std::array`、`std::list`、`std::deque`)、关联容器(`std::set`、`std::map`)和无序容器(`std::unordered_set`、`std::unordered_map`),全面解析它们的特点、用法
C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程
|
7月前
|
存储 分布式计算 编译器
C++入门基础2
本内容主要讲解C++中的引用、inline函数和nullptr。引用是变量的别名,与原变量共享内存,定义时需初始化且不可更改指向对象,适用于传参和返回值以提高效率;const引用可增强代码灵活性。Inline函数通过展开提高效率,但是否展开由编译器决定,不建议分离声明与定义。Nullptr用于指针赋空,取代C语言中的NULL。最后鼓励持续学习,精进技能,提升竞争力。
|
7月前
|
存储 算法 C++
【c++丨STL】set/multiset的使用
本文深入解析了STL中的`set`和`multiset`容器,二者均为关联式容器,底层基于红黑树实现。`set`支持唯一性元素存储并自动排序,适用于高效查找场景;`multiset`允许重复元素。两者均具备O(logN)的插入、删除与查找复杂度。文章详细介绍了构造函数、迭代器、容量接口、增删操作(如`insert`、`erase`)、查找统计(如`find`、`count`)及`multiset`特有的区间操作(如`lower_bound`、`upper_bound`、`equal_range`)。最后预告了`map`容器的学习,其作为键值对存储的关联式容器,同样基于红黑树,具有高效操作特性。
286 3
|
8月前
|
存储 算法 C++
【c++丨STL】priority_queue(优先级队列)的使用与模拟实现
本文介绍了STL中的容器适配器`priority_queue`(优先级队列)。`priority_queue`根据严格的弱排序标准设计,确保其第一个元素始终是最大元素。它底层使用堆结构实现,支持大堆和小堆,默认为大堆。常用操作包括构造函数、`empty`、`size`、`top`、`push`、`pop`和`swap`等。我们还模拟实现了`priority_queue`,通过仿函数控制堆的类型,并调用封装容器的接口实现功能。最后,感谢大家的支持与关注。
377 1
|
8月前
|
编译器 C++ 开发者
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
|
4月前
|
人工智能 机器人 编译器
c++模板初阶----函数模板与类模板
class 类模板名private://类内成员声明class Apublic:A(T val):a(val){}private:T a;return 0;运行结果:注意:类模板中的成员函数若是放在类外定义时,需要加模板参数列表。return 0;
94 0