`
xinyiwust
  • 浏览: 13517 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

stl vector源码学习笔记

    博客分类:
  • C++
阅读更多
1.vector中的size()方法是常数量级的,其中 0 == size()和empty()是等价的;
  size_type size() const
    { return size_type(end() - begin()); }

  bool empty() const
    { return begin() == end(); }

2.构造函数,若采用默认构造函数,vector的容量为0,在容量不足的情况下会以1、2、4...指数级的增长;如果指定容量和初始值,则构建指定长度和初始值的容器,当容量不足时,将容量翻倍。
#include<iostream>
#include<list>
#include<vector>
#include<deque>
#include<stdint.h>
#include<algorithm>
#include<iterator>

using std::cout;
using std::vector;
using std::ostream_iterator;
using std::copy;
using std::endl;

int main()
{

        cout<<"hello,c++"<<endl;
        vector<uint32_t> vec(10);
        cout<<"vector capacity : "<<vec.capacity()<<endl;
        for(uint32_t i=0;i<10;i++)
        {
                vec[i]=i+1;
        }
        cout<<"vector size : "<<vec.size()<<endl;
        cout<<"vector capacity : "<<vec.capacity()<<endl;
        copy(vec.begin(),vec.end(),ostream_iterator<uint32_t>(cout,"."));
        cout<<endl;
        return 0;
}

输出结果如下:
hello,c++
vector capacity : 10
vector size : 10
vector capacity : 10
1.2.3.4.5.6.7.8.9.10.

int main()
{

        cout<<"hello,c++"<<endl;
        vector<uint32_t> vec;
        cout<<"vector capacity : "<<vec.capacity()<<endl;
        for(uint32_t i=0;i<10;i++)
        {
                vec.push_back(i);
        }
        cout<<"vector size : "<<vec.size()<<endl;
        cout<<"vector capacity : "<<vec.capacity()<<endl;
        copy(vec.begin(),vec.end(),ostream_iterator<uint32_t>(cout,"."));
        cout<<endl;
        return 0;
}

输出结果:
hello,c++
vector capacity : 0
vector size : 10
vector capacity : 16
0.1.2.3.4.5.6.7.8.9.

3.如果构造函数指定的长度,不管有没有指定初始值,当调用push_back的时候,都会首先增大容量,再添加值(使用时要尤其注意)。
int main()
{

        cout<<"hello,c++"<<endl;
        vector<uint32_t> vec(10);
        //vector<uint32_t> vec(10);
        cout<<"vector capacity : "<<vec.capacity()<<endl;
        for(uint32_t i=0;i<10;i++)
        {
                vec.push_back(i);
        }
        cout<<"vector size : "<<vec.size()<<endl;
        cout<<"vector capacity : "<<vec.capacity()<<endl;
        copy(vec.begin(),vec.end(),ostream_iterator<uint32_t>(cout,"."));
        cout<<endl;
        return 0;
}

输出结果:
hello,c++
vector capacity : 10
vector size : 20
vector capacity : 20
0.0.0.0.0.0.0.0.0.0.0.1.2.3.4.5.6.7.8.9.

4.要尤其注意[]和at()的越界,尤其是[],在使用[]给vector赋值的时候,一定要注意其边界值。
分享到:
评论

相关推荐

    C++进阶STL源码笔记

    这份“C++进阶STL源码笔记”可能包含了对这些概念的实例解析,以及作者在学习过程中遇到的问题和解决方案,对于希望提升C++编程技能的人来说,是一份宝贵的参考资料。配合视频教程进行学习,可以让理论与实践相结合...

    c++ -- stl 学习笔记

    这篇学习笔记将深入探讨STL的核心概念、主要组件以及其在实际编程中的应用。 首先,STL的核心概念是容器、迭代器、算法和函数对象。容器是STL提供的一系列数据结构,如vector(动态数组)、list(双向链表)、set...

    《Effective STL》学习笔记

    《Effective STL》是Scott Meyers的一本经典著作,旨在帮助读者深入理解并有效利用STL(Standard Template ...通过阅读“STL源码剖析笔记.doc”,我们可以进一步探索STL的具体实现细节,增强对STL底层工作的认识。

    c++源码 学习笔记

    C++是一种强大的、通用的...总之,这份"C++源码 学习笔记"是一个全面的学习资源,无论是初学者还是经验丰富的程序员,都能从中受益,提升自己的C++技能。通过深入学习和实践,读者将能够编写出高效、可维护的C++程序。

    STLSourceAnalysis:stl原始码剖析(侯捷)的学习笔记

    本学习笔记主要基于侯捷老师的这本书,对STL的源码进行深度分析,以提升对C++编程和STL使用的理解。以下是一些关键知识点: 1. **容器**:STL提供了多种容器,如vector、list、deque、set、map等。vector是动态数组...

    c++源码笔记_非常值得一看

    8. 标准库应用:STL(Standard Template Library)是C++的标准库,包含容器(如vector、list)、算法和迭代器等,极大地提高了开发效率。C++(day10).txt可能介绍了STL的使用。 9. 多线程编程:C++11引入了内置的多...

    达内科技 c++ 培训教程 源码+笔记

    这份"达内科技 C++ 培训教程 源码+笔记"的资源集合,为学习者提供了丰富的学习材料,包括源代码和笔记,是学习C++的理想起点。 首先,C++的基础知识包括语法、数据类型、控制结构、函数等。C++支持基本的数据类型如...

    STL_Sources:学习《 STL源码剖析》,存放相关的个人代码及学习笔记

    在这个名为"STL_Sources"的压缩包中,可能包含了读者在学习这本书时编写的个人代码示例以及学习笔记,以加深对STL的理解。 1. **容器**:STL提供了几种基本的容器,如vector(动态数组)、list(双向链表)、deque...

    Visual C++程序设计学习笔记(1-12 源码)

    5. **STL(标准模板库)**:讲解容器(如vector、list、set等)、算法和迭代器的使用。 6. **文件操作**:介绍如何读写文件,包括文本文件和二进制文件的操作。 7. **图形用户界面(GUI)编程**:利用MFC或WinAPI...

    C++源码 笔记.

    标题"\"C++源码 笔记\""提示我们,这可能是一份关于C++编程的学习资料,可能包括代码示例、概念解释以及编程技巧等内容。笔记通常会涵盖基本语法、数据类型、控制结构、函数、类与对象、模板、STL(Standard ...

    C++进阶笔记源码

    2. **STL(Standard Template Library)**:STL是C++标准库的一部分,提供了容器(如vector、list、map)、算法和迭代器等工具,大大提高了代码的可读性和效率。笔记中可能会详细解析各种容器的使用场景和性能差异,...

    达内科技c++课件及源码笔记【完美版】【初学者福音】

    "达内科技C++课件及源码笔记【完美版】【初学者福音】"是一份专门为初学者设计的学习资源,包含了C++的基础知识和实践代码,旨在帮助新手快速掌握这一语言。 课件部分可能涵盖了以下几个方面: 1. **基础语法**:...

    达内C++课堂笔记和源码

    这些知识点在达内的C++课堂笔记和源码中应有详细讲解,通过实际的编程练习和示例,可以帮助学习者深入理解和掌握C++编程。同时,源码部分提供了实践操作的机会,使理论与实践相结合,提升编程技能。

    达内科技 c++ 课件 及 源码 笔记【完美版】【初学者福音】

    达内科技作为知名的IT培训机构,提供的C++课程和源码笔记为初学者提供了丰富的学习资源,帮助他们更好地理解和掌握C++语言。 在C++课件中,你将可能学习到以下知识点: 1. **基础语法**:C++的基础包括变量、数据...

    c++源码 笔记个人总结

    6. **STL(标准模板库)**:STL是C++库的一部分,包含容器(如vector、list、set等)、迭代器、算法和函数对象,为编程提供了便利。 7. **异常处理**:C++中的异常处理机制允许程序在出现错误时通过throw和catch...

    Linux学习笔记(强悍总结值得一看),细说linux基础知识,C,C++源码.zip

    Linux学习笔记是一个全面涵盖Linux操作系统基础、C语言和C++编程源码的综合学习资源。这份资料对于初学者和有经验的开发者来说都是一个宝贵的参考资料,它深入浅出地介绍了Linux系统的核心概念和操作,同时也提供了C...

    VC笔记源码

    【VC笔记源码】是一个集合了Visual C++(简称VC)技术的代码资源包,它包含了一些高质量的代码示例,旨在为开发者提供学习和参考的素材。在深入探讨这个资源包之前,我们先来了解一下VC及其相关知识点。 Visual C++...

    C、C++、Qt、Linux、ARM、数据结构等学习笔记.zip

    这些学习笔记涵盖了一系列重要的计算机科学和技术领域,包括基础编程语言C和C++,GUI开发库Qt,操作系统Linux,以及嵌入式系统中的ARM架构,还有核心的计算机科学概念——数据结构。下面,我将深入解释这些主题的...

    c++学习笔记.zip

    10. **STL(Standard Template Library)标准模板库**:包括容器(如vector、list、map等)、算法(如排序、查找、迭代器操作等)和迭代器,极大地提高了C++程序员的开发效率。 11. **文件I/O**:C++提供了流式I/O...

Global site tag (gtag.js) - Google Analytics