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;
    }
    
    

    引用博客链接

  • 相关阅读:
    Linux下干净卸载mysql详解
    服务器重启后 django无法连接mysql数据库的解决方法
    团队排表系统V3.0最佳实践及使用说明
    nginx配置部署多个单页应用 踩坑
    前端项目首屏加速 gzip打包 路由懒加载 cdn资源优化
    JS实现手动将String转换为utf8格式的arraybuffer
    微信小程序Component组件调用回调函数this指向不是本页面
    linux系统后台运行python, 关闭shell后不会中断
    pycharm连接数据库失败
    react添加onScroll事件踩坑
  • 原文地址:https://www.cnblogs.com/heihuifei/p/7828763.html
Copyright © 2011-2022 走看看