首页 > 其他分享 >STL——3.迭代器

STL——3.迭代器

时间:2024-10-10 13:17:32浏览次数:3  
标签:std cout 迭代 STL int vec include

 1.迭代器的基本概念

作用:迭代器是用于遍历容器元素的对象。

分类:

  • 输入迭代器
  • 输出迭代器
  • 前向迭代器
  • 双向迭代器
  • 随机访问迭代器
2.迭代器的用法
2.1输入迭代器
#include <iostream>
#include <iterator>
#include <vector>
 
int main() {
    std::cout << "Enter integers separated by spaces (Ctrl+D to end): ";
    std::istream_iterator<int> input_it(std::cin);  //输入迭代器
    std::istream_iterator<int> end_of_stream;       //输入流结束标志
 
    std::vector<int> vec(input_it, end_of_stream);  //从输入流中读取数据并存入向量
 
    std::cout << "You entered: ";
    for (const auto& elem : vec) {
        std::cout << elem << " ";
    }
    std::cout << std::endl;
 
    return 0;
}
2.2输出迭代器
#include <iostream>
#include <iterator>
#include <vector>
 
int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
 
    std::cout << "Vector elements: ";
    std::ostream_iterator<int> output_it(std::cout, " ");  //输出迭代器
    std::copy(vec.begin(), vec.end(), output_it); //将向量元素写入到标准输出
 
    std::cout << std::endl;
    return 0;
}
2.3前向迭代器
#include <iostream>
#include <forward_list>
 
int main() {
    std::forward_list<int> flist = {1, 2, 3, 4, 5};
 
    std::cout << "Forward list elements: ";
    for (auto it = flist.begin(); it != flist.end(); ++it) {
        std::cout << *it << " ";  // 通过解引用操作符访问元素
    }
    std::cout << std::endl;
 
    return 0;
}
2.4双向迭代器
#include <iostream>
#include <list>
 
int main() {
    std::list<int> lst = {10, 20, 30, 40, 50};
 
    std::cout << "List elements in forward order: ";
    for (auto it = lst.begin(); it != lst.end(); ++it) {
        std::cout << *it << " ";  // 向前遍历并访问元素
    }
    std::cout << std::endl;
 
    std::cout << "List elements in reverse order: ";
    for (auto it = lst.rbegin(); it != lst.rend(); ++it) {
        std::cout << *it << " ";  // 向后遍历并访问元素
    }
    std::cout << std::endl;
 
    return 0;
}
2.5随机访问迭代器
#include <iostream>
#include <vector>
 
int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
 
    std::cout << "Vector elements: ";
    for (auto it = vec.begin(); it != vec.end(); ++it) {
        std::cout << *it << " ";  // 向前遍历并访问元素
    }
    std::cout << std::endl;
 
    std::cout << "Third element: " << vec[2] << std::endl;  // 随机访问第三个元素
 
    return 0;
}
3.常见迭代器的高级操作
 3.1std::advance

移动迭代器

#include <iostream>
#include <vector>
#include <iterator>
 
int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    auto it = vec.begin();
    
    std::advance(it, 2);  // 将迭代器移动两个位置
    
    std::cout << "Element at position 3: " << *it << std::endl;
 
    return 0;
}
3.2std::prev和std::next

获取起一个和后一个迭代器

#include <iostream>
#include <vector>
#include <iterator>
 
int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    auto it = vec.begin();
    std::advance(it, 2); // 移动到第三个位置
    
    // 使用 std::prev 获取前一个迭代器
    auto prev_it = std::prev(it);
    std::cout << "Previous element: " << *prev_it << std::endl;
 
    // 使用 std::next 获取后一个迭代器
    auto next_it = std::next(it);
    std::cout << "Next element: " << *next_it << std::endl;
 
    return 0;
}

标签:std,cout,迭代,STL,int,vec,include
From: https://blog.csdn.net/weixin_52133252/article/details/142789944

相关文章

  • 【C++】string (STL)
    string介绍字符串是表示字符序列的类标准的字符串类提供了对此类对象的支持,其接口类似于标准字符容器的接口,但添加了专门用于操作单字节字符字符串的设计特性。string类是使用char(即作为它的字符类型,使用它的默认char_traits和分配器类型(关于模板的更多信息,请参阅basic_s......
  • 深入理解Python的生成器与迭代器:编写高效的代码
    深入理解Python的生成器与迭代器:编写高效的代码在Python编程中,生成器(Generators)和迭代器(Iterators)是编写高效代码的重要工具。它们帮助我们节省内存、优化性能,尤其在处理大数据时表现尤为出色。这篇博客将深入探讨生成器与迭代器的工作原理、如何使用它们编写高效代码,并通......
  • 手写 p-map(控制并发数以及迭代处理 promise 的库)
    介绍p-map是一个迭代处理promise并且能控制promise执行并发数的库。作者是sindresorhus,他还创建了许多关于promise的库promise-fun,感兴趣的同学可以去看看。之前提到的p-limit也是一个控制请求并发数的库,控制并发数方面,两者作用相同,不过p-map增加了对请求(promise)......
  • 【STL详解】STL标准模板库入门 | STL版本 | STL六大组件 | STL优点 | 常用STL容器vect
    目录1、概述1.1、C++标准库1.2、Boost开源库2、STL版本2.1、HP原始版本2.2、P.J.实现版本2.3、RW实现版本2.4、SGI实现版本2.5、STLport实现版本3、STL的六大组件3.1、STL六大组件构成3.2、六大组件的交互关系4、STL优点5、STL常用容器vector、list......
  • k8s pods 迭代penging
    节点磁盘空间不足,导致的集群GC清理失败,如果频繁发生,您需要扩容磁盘空间了kubectldeletensns_id--force一直Terminating?finalizers:-finalizers.kubesphere.io/namespaceskubectleditdeploykiali-operator-nistio-systemdefault8m31sWarningVolumeFailedDelet......
  • STL-set
    STLset头文件set主要包括set和multiset两个容器,分别是“有序集合”和“有序多重集合”即前者的元素不能重复,而后者可以包含若干个相等的元素set和multiset的内部实现是一棵红黑树,它们支持的函数基本相同include声明#include<set>函数声明set<int>s;structrec{…};......
  • STL-queue&deque&stack
    STLqueue&deque&stackqueue主要包括循环队列queue和优先队列priority_queue两个容器stack包含栈容器include头文件声明#include<queue>#include<deque>#include<stack>声明queue<int>q;deque<int>p;structabc{…};queue<abc>q; //结构体r......
  • STL-vector
    STLvectorvector是动态数组,支持随机访问,不支持在任意位置O(1)插入为,元素的增删一般在末尾进行include头文件声明vectora;相当于声明一个长度动态变化的int数组vectorb[233];相当于声明一个第一维长233,第二维长度动态变化的int数组structabc{...};vectorc;自定......
  • STL-queue&stack
    STLqueue&stackqueue主要包括循环队列queue和优先队列priority_queue两个容器stack包含栈容器include头文件声明#include<queue>#include<stack>声明queue<int>q;structabc{…};queue<abc>q; //结构体rec中必须定义小于号priority_queue<int>q; //大根......
  • STL
    vector是动态数组,支持随机访问,不支持在任意位置O(1)插入为,元素的增删一般在末尾进行include头文件声明vectora;相当于声明一个长度动态变化的int数组vectorb[233];相当于声明一个第一维长233,第二维长度动态变化的int数组structabc{...};vectorc;自定义的结构体类......