zoukankan      html  css  js  c++  java
  • STL之vector

    STL之vector原理(个人简单理解)

    新增元素:vector通过一个连续的数组存放元素,如果已有集合已满,在新增数据的时候,就要分配一块更大的内存,将原来的数据复制过来,释放之前的内存,在插入新增的元素。

    插入新数据可以在最后插入(push_back或者其他的插入方式)也可以通过迭代器在任何位置插入。迭代器插入:通过迭代器与第一个元素的距离知道要插入的位置,int len=iter-begin();这个元素后面的所有元素都向后移动一个位置,在空出来的位置上存入新增的元素。

    同理删除也是一样的分为删除最后一个元素pop_back和通过迭代器删除任意一个位置的元素erace(iter),通过迭代器还是要先找到要删除的元素的位置,int len=iter-begin();这个位置后面的每个元素都向前移动一个位置,同时erace不释放内存值初始化成默认值。还有一些其他的函数:比如删除所有元素,clear(只是循环调用了erace,所以删除的时候也是没有释放内存的),还有vector的大小函数size()等等

    学习博客链接(我只是初步理解的更好了一点,感觉还没有理解透彻),下次继续~

    引用代码(修改值的方法):

    // vectorsample.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include<iostream>
    #include<vector>
    
    using namespace std;
    
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	
    	//int型vector,包含3个元素
    	vector<int> vecIntA;
    
    	//插入1 2 3
    	vecIntA.push_back(1);
    	vecIntA.push_back(2);
    	vecIntA.push_back(3);
    	
    	int nSize = vecIntA.size();
    
    	//通过引用修改vector
    	cout<<"通过数组修改,第二个元素为8:"<<endl;
    	vecIntA[1]=8;
    
    	cout<<"vecIntA:"<<endl;
    	//打印vectorA
    	for(vector<int>::iterator it = vecIntA.begin();it!=vecIntA.end();it++)
    	{
    		cout<<*it<<"     ";
    	}
    	cout<<endl;
    	
    	//通过引用修改vector
    	cout<<"通过引用修改,第二个元素为18:"<<endl;
    	int &m = vecIntA.at(1);
    	m=18;
    
    	cout<<"vecIntA:"<<endl;
    	//打印vectorA
    	for(vector<int>::iterator it = vecIntA.begin();it!=vecIntA.end();it++)
    	{
    		cout<<*it<<"     ";
    	}
    	cout<<endl;
    
    	//通过迭代器修改vector
    	cout<<"通过迭代器修改,第二个元素为28"<<endl;
    	vector<int>::iterator itr = vecIntA.begin()+1;
    	*itr = 28;
    
    	cout<<"vecIntA:"<<endl;
    	//打印vectorA
    	for(vector<int>::iterator it = vecIntA.begin();it!=vecIntA.end();it++)
    	{
    		cout<<*it<<"     ";
    	}
    	cout<<endl;
    
    	return 0;
    }
    
    

    引用博客链接

  • 相关阅读:
    Postman使用
    Java-性能调优-理解GC日志
    Java-性能调优实战(jps、jstack)
    Java-性能调优工具-jstat
    Java-内存模型
    生产者消费者JAVA实现
    Java-GC垃圾收集器
    JAVA-JVM垃圾回收算法
    Java线程状态流转---线程
    【洛谷5072】[Ynoi2015] 盼君勿忘(莫队)
  • 原文地址:https://www.cnblogs.com/heihuifei/p/7828763.html
Copyright © 2011-2022 走看看