Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >c++ vector的遍历

c++ vector的遍历

作者头像
用户6021899
发布于 2021-07-05 07:41:54
发布于 2021-07-05 07:41:54
1K00
代码可运行
举报
运行总次数:0
代码可运行

vector 是C++标准模板库中的一个类模板。

  • 用vector<typename> v 可以声明一个元素类型为typename的容器类模板v。
  • v.push_back()函数可以向容器v的尾部添加一个元素。
  • vector<typename>::iterator it 声明一个迭代器it。it是一个指向typename型数据的指针,可用于遍历vector。
  • v.begin() 指向vector第一个元素。
  • v.end()指向vector 最后一个元素的后一个位置。

练习的源码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <vector>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;


class Book
{
    friend ostream& operator<<(ostream& o, Book& b);
public:
    string name;
    float price;
    string author;
    Book(string name, float price, string author)
    {
        this->name = name;
        this->price = price;
        this->author = author;
    }
};
ostream& operator<<(ostream& o, Book& b)
{
    o<< b.name;
    return o;
}


void func(Book& b)
{
    cout<<b.name<<endl;
}


void test1()
{
    vector<float> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    v.push_back(4);


    for(vector<float>::iterator it = v.begin(); it!=v.end(); it++)
    {
        cout<< *it << endl;
    }
}


void test1_1()
{
    vector<Book> v;
    Book b1("天", 50, "哈哈");
    Book b2("人", 40, "嘻嘻");
    Book b3("地", 40, "嘿嘿");
    v.push_back(b1);
    v.push_back(b2);
    v.push_back(b3);


    //用algorithm 库的for_each 迭代,对每一元素循环调用func
    for_each(v.begin(), v.end(), func);
}
void test2()
{


    Book b1("天", 50, "哈哈");
    Book b2("人", 40, "嘻嘻");
    Book b3("地", 40, "嘿嘿");
    vector<Book> v;
    v.push_back(b1);
    v.push_back(b2);
    v.push_back(b3);


    for(vector<Book>::iterator it = v.begin(); it!=v.end(); it++)
    {
        cout<< *it << endl;
    }
}


void test3()
{
    //vector 的元素为指向对象的指针。
    Book b1("天", 50, "哈哈");
    Book b2("人", 40, "嘻嘻");
    Book b3("地", 40, "嘿嘿");
    vector<Book*> v;
    v.push_back(&b1);
    v.push_back(&b2);
    v.push_back(&b3);


    for(vector<Book*>::iterator it = v.begin(); it!=v.end(); it++)
    {
        cout<< **it << endl;
        cout<< (*it)->author << endl; //-> 优先级比 * 高
    }
}


void test4()
{
    Book b1("天", 50, "哈哈");
    Book b2("地", 40, "嘻嘻");
    Book b3("人", 40, "嘿嘿");
    vector<Book*> v1;
    v1.push_back(&b1);
    v1.push_back(&b2);
    v1.push_back(&b3);


    vector<Book*> v2;
    v2.push_back(&b3);
    v2.push_back(&b2);
    v2.push_back(&b1);


    //嵌套vector的用法
    vector <vector<Book*>> V;
    V.push_back(v1);
    V.push_back(v2);


    for(vector <vector<Book*>>::iterator it_outter = V.begin(); it_outter!= V.end(); it_outter++)
    {
        vector<Book*> v = *it_outter;
        for(vector<Book*>::iterator it_inner = v.begin(); it_inner!= v.end(); it_inner++)
        {
            cout<< (*it_inner)->author<<" ";//-> 优先级比 * 高
        }
        cout<<endl;
    }


}


int main()
{
    test1_1();
    //test3();
    test4();


    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-06-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python可视化编程机器学习OpenCV 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【C++】————STL之vector
上面这个定义其实相当于是一维数组name[size],只不过其size可以根据需要进行变化,这就是“变长数组”的名字的由来。
用户11036582
2024/07/15
1790
C++中的vector容器(保姆级讲解)
并不是在原有空间之后续集新的空间,而是找更大的内存空间,然后将原数据拷贝新空间,释放原空间
莫浅子
2022/11/18
1.6K0
C++中的vector容器(保姆级讲解)
C++STL容器vector
总结: vector赋值方式比较简单,使用operator=,或者assign都可以
CtrlX
2022/09/28
2630
C++STL容器vector
【C++】STL--vector
使用STL的三个境界:能用,明理,能扩展 ,那么下面学习vector,我们也是按照这个方法去学习
用户11375356
2024/11/22
840
【C++】STL--vector
vector的模拟和实现
如果已经确定vector中要存储元素大概个数,可以提前将空间设置足够,就可以避免边插入边扩容导致效率低下的问题了:
南桥
2024/05/13
750
vector的模拟和实现
C++提高编程笔记合集
建立一个通用函数,其函数返回值类型和形参类型可以不具体制定,用一个虚拟的类型来代表。
CtrlX
2022/10/27
9390
C++提高编程笔记合集
【C++】vector及模拟实现
为了方便打印vector中不同类型的数据,可以将迭代器遍历和范围for遍历封装成一个模版函数,有几点需要注意:
_小羊_
2024/10/16
770
【C++】vector及模拟实现
vector容器!
不同之处在于数组是静态空间,而vector是可以动态扩展的。动态扩展它并不是在原空间之后持续新空间,而是找更大的内存空间,然后将原数据拷贝到新空间,释放原空间。
用户6280468
2022/03/21
4000
vector容器!
【C++】—— vector使用
STL库里面构造函数参数有空间适配器(allocator),这里先不了解这一方面的内容(后面再详细学习)。
星辰与你
2024/10/17
1880
【C++】—— vector使用
【C++】vector模拟实现
来看一下vector源码:这里的成员变量都是iterator,而iterator是value_type*,看源码中value_type*又是T。
zxctscl
2024/03/30
1460
【C++】vector模拟实现
c++STL容器之vector容器
所谓动态扩展:并不是在原空间后接新空间,而是找到更大的内存空间,然后将原数据拷贝至,然后释放原空间。
西西嘛呦
2020/08/26
4510
❤ 挑战C站最强C++ STL标准库总结(内含大量示例)
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家,(ノ´▽`)ノ♪-》点击这里->一个宝藏级人工智能教程网站。
全栈程序员站长
2022/09/09
1.4K0
❤ 挑战C站最强C++ STL标准库总结(内含大量示例)
C++ Vector
c++ vector 简介 vector 是顺序容器的一种,vector 是可变长的动态数组(可存放任意类型),支持随机访问迭代器。所有 STL 算法都能对 vector 进行操作,要使用 vector,需要包含头文件 vector 优点 - 因其拥有一段连续的内存空间,能非常好的支持随即存取,即[]操作符。 - 根据下标随机访问某个元素的时间是常数,在尾部添加一个元素的时间大多情况下也是常数,总体来说速度很快 缺点 - 若要表示的向量长度较长(需要为向量内部保存很多数),容易导致内存泄漏,而且
ruochen
2021/05/20
1.9K0
C++ Vector
STL-常用算法总结
transform(iterator beg1, iterator end1, iterator beg2, _func);//搬运容器
WuShF
2023/02/11
5990
STL-常用算法总结
初识C++ · 模拟实现vector
继上文模拟实现了string之后,接着就模拟实现vector,因为有了使用string的基础之后,vector的使用就易如反掌了,所以这里直接就模拟实现了,那么实现之前,我们先看一下源代码和文档:
_lazy
2024/10/16
890
初识C++ · 模拟实现vector
【C++】vector(下)--下篇
关于第一部分,这段代码都是内置类型,它们也与类模板的初始化方式相同,这是因为T可以是任意的类型,当然也可以是int、double等内置类型,所以这里的构造遵从类模板
s-little-monster
2024/09/09
1020
【C++】vector(下)--下篇
C++STL初识,概念、六大组件、容器算法迭代器
STL大体分为六大组件,分别是:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器
CtrlX
2022/09/27
5340
【C++】vector模拟实现、迭代器失效问题(超详解)
vector会使用之后我们来模拟实现一下,通过对vector的模拟实现,我们来说一下迭代器失效问题。
羚羊角
2024/11/15
1000
【C++】vector模拟实现、迭代器失效问题(超详解)
【C++】简化源码——vector的模拟实现
这本质上与T*a,size_t size,size_t capacity是类似的:
平凡的人1
2023/10/15
1990
【C++】简化源码——vector的模拟实现
【C++】你对vector的了解又有多少呢?
六点半就起.
2024/10/16
570
【C++】你对vector的了解又有多少呢?
相关推荐
【C++】————STL之vector
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验