【C++】vector的认识与使用

07-21 1239阅读

vector的认识与使用

  • 认识vector
  • vector的使用
    • Member functions(成员函数)
      • 构造函数(constructor)
      • 析构函数(destructor)
      • 赋值构造函数(operator=)
      • Iterators(迭代器)
        • begin
        • end
        • rbegin
        • rend
        • Capacity(容量)
          • size
          • max_size
          • resize
          • capacity
          • empty
          • reserve
          • Element access(元素访问)
            • operator[]
            • at
            • front
            • back
            • Modifiers(修饰符)
              • assign
              • push_back
              • pop_back
              • insert
              • erase
              • swap
              • clear

                认识vector

                vector:翻译过来是向量,矢量。但是学习过来,给我的感觉类似于顺序表,或者说是数组??

                【C++】vector的认识与使用

                • std::vector
                • template class vector; // generic template

                  【C++】vector的认识与使用

                  class T代表的是一个类型,是成员变量。

                  【C++】vector的认识与使用

                  allocator代表的是空间配置器。

                  • vector是一个可以改变大小的代表数组的序列容器。
                  • 类似于数组,vector使用连续的存储位置存储元素,意味着可以采用下标对vector的元素进行访问,并且和数组一样高效。但是不同于数组,其大小可以随着存储被容器自动处理而动态改变。
                  • 本质来将,vector使用动态分配数组来存储它的元素。对于数组而言,当新元素被插入的时候,数组为了增加存储空间需要被重新分配大小。其做法是,分配一个新的数组,然后将全部元素移到这个数组。就时间而言,这是一个相对代价高的任务,vector并不会每次都重新分配大小。
                  • vector分配空间策略:vector会分配一些额外的空间以适应可能的增长,因为存储空间比实际需要的存储空间更大。不同的库采用不同的策略权衡空间的使用和重新分配。但是无论如何,重新分配都应该是对数增长的间隔下进行增长的,以至于在末尾插入一个元素的时候可以提供摊销的恒定时间复杂度。
                  • 因此,vector占用了更多的存储空间,为了获得管理存储空间的能力,并且以一种有效的方式动态增长。
                  • 与其他动态序列容器相比(deque,list,forward_list),vector在访问元素的时候更加高效,在末尾添加和删除元素相对高效。对于其他不在末尾的删除和插入操作,效率更低。比起list和forward_list统一的迭代器和引用更好。

                    vector的使用

                    在使用STL的三个境界:能用,明理,能扩展。

                    在介绍vector的时候,需要结合文档来学习:链接: vector

                    Member functions(成员函数)

                    构造函数(constructor)

                    【C++】vector的认识与使用

                    • std::vector::vector
                    • 构造vector
                    • 构造一个vector容器,根据使用的构造函数版本初始化其内容
                    • default (1)

                      explicit vector (const allocator_type& alloc = allocator_type());

                      无参构造函数(默认构造)

                      构造一个没有任何元素的空的容器

                      	vector v1;
                      
                      • fill (2)

                        explicit vector (size_type n, const value_type& val = value_type(),

                        const allocator_type& alloc = allocator_type());

                        fill构造函数

                        构造一个有n个元素的容器,每一个元素都是val的值。

                        	vector v2(10, 1);
                        	vector v3(5, 'x');
                        	vector v4(6, "hello");
                        
                        • range (3)

                          template

                          vector (InputIterator first, InputIterator last,

                          const allocator_type& alloc = allocator_type());

                          range构造函数

                          构造一个函数,其中包含与范围(first,last)一样长的元素,每一个元素以相同的顺序从该范围内的相应元素构造。

                          	int a[4] = { 4,27,22,20 };
                          	vector v5(a, a + 4);
                          

                          这种方式可以使用自己的迭代器进行构造:

                          	vector v1(10, 1);
                          	vector v2(v1.begin(), v1.end());
                          

                          同时也可以使用其他容器的迭代器:

                          	string str("hello world");
                          	vector v(str.begin(), str.end());
                          

                          【说明】STL中包括容器(存储数据)和算法(对数据进行处理),在算法中有一个sort()函数,头文件为,就是使用迭代器进行排序的。

                          【C++】vector的认识与使用

                          下面进行升序排序操作:

                          	int a[4] = { 4,27,22,20 };
                          	vector v(a, a + 4);
                          	sort(v.begin(), v.end());
                          	for (size_t i = 0; i 
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]