欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Vector的相关内容

程序员文章站 2022-03-02 15:37:13
...

Vector的相关内容

关于容器 
c++中有两种类型的容器:顺序容器和关联容器 
顺序容器:vector、list、deque等。其中vector表示一段连续的内存地址,基于数组的实现,list表示非连续的内存,基于链表实现。deque与vector类似,但是对于首元素提供删除和插入的双向支持。 
关联容器:map、set。map是key-value形式的,set是单值。map和set只能存放唯一的key值,multimap和multiset可以存放多个相同的key值。 
容器类自动申请和释放内存,我们无需new和delete操作。1


关于vector

vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的.2


vector定义和初始化

vector<int> vec1;    //默认初始化,vec1为空,类型为int
vector<int> vec2(vec1);  //使用vec1初始化vec2
vector<int> vec3(vec1.begin(),vec1.end());//使用vec1初始化vec2
vector<int> vec4(10);    //10个值为0的元素
vector<int> vec5(10,4);  //10个值为4的元素
  • 1
  • 2
  • 3
  • 4
  • 5

vec.push_back()

在vector类中作用为在vector尾部加入一个数据。 
vec.push_back(1);


vec.insert()

//用法1:在指定位置it前“插入”值为val的元素,返回指向这个元素的迭代器,  
iterator insert( iterator it, const TYPE &val );   

//用法2:在指定位置it前“插入”num个值为val的元素   
void insert( iterator it, size_type num, const TYPE &val );   

//用法3:在指定位置it前“插入”区间[start, end)的所有元素.   
void insert( iterator it, input_iterator start, input_iterator end );   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

vec.erase()

(1)erase(pos,n); 删除从pos开始的n个字符,比如erase(0,1)就是删除第一个字符 
(2)erase(position);删除position处的一个字符(position是个string类型的迭代器) 
(3)erase(first,last);删除从first到last之间的字符(first和last都是迭代器)

#include <iostream>
#include <string>
using namespace std;

int main ()
{
  string str ("This is an example phrase.");
  string::iterator it;

  // 第(1)种用法
  str.erase (10,8);
  cout << str << endl;        // "This is an phrase."

  // 第(2)种用法
  it=str.begin()+9;
  str.erase (it);
  cout << str << endl;        // "This is a phrase."

  // 第(3)种用法
  str.erase (str.begin()+5, str.end()-7);
  cout << str << endl;        // "This phrase." 闭区间全删了
  return 0;
}

vector<\type>::iterator name

vector<int>::iterator it; 
这条语句定义了一个名为it的变量,它的数据类型是由vector定义的iterator类型。

初始化

it=vec.begin(); 
指向了容器的首个元素

访问

*it 
访问迭代器指向的元素

运算

iterator除了进行++,–操作,可以将iter+n,iter-n赋给一个新的iteraor对象。还可以使用一个iterator减去另外一个iterator.

常用的一个格式

(我觉得常用的(逃))

#include <vector>
#include <iostream>

using namespace std;

int main() {
vector<int> ivec;
ivec.push_back(1);
ivec.push_back(2);
ivec.push_back(3);
ivec.push_back(4);

for(vector<int>::iterator iter = ivec.begin();1. iter != ivec.end(); ++iter)//遍历
cout << *iter << endl;
}

迭代器与指针的差别

迭代器: 
(1)迭代器不是指针,是类模板,表现的像指针。他只是模拟了指针的一些功能,通过重载了指针的一些操作符,->,*,++ –等封装了指针,是一个“可遍历STL( Standard Template Library)容器内全部或部分元素”的对象, 本质是封装了原生指针,是指针概念的一种提升(lift),提供了比指针更高级的行为,相当于一种智能指针,他可以根据不同类型的数据结构来实现不同的++,–等操作; 
(2)迭代器返回的是对象引用而不是对象的值,所以cout只能输出迭代器使用*取值后的值而不能直接输出其自身。 
(3)在设计模式中有一种模式叫迭代器模式,简单来说就是提供一种方法,在不需要暴露某个容器的内部表现形式情况下,使之能依次访问该容器中的各个元素,这种设计思维在STL中得到了广泛的应用,是STL的关键所在,通过迭代器,容器和算法可以有机的粘合在一起,只要对算法给予不同的迭代器,就可以对不同容器进行相同的操作。 
指针: 
指针能指向函数而迭代器不行,迭代器只能指向容器;指针是迭代器的一种。指针只能用于某些特定的容器;迭代器是指针的抽象和泛化。所以,指针满足迭代器的一切要求。 
:迭代器在使用后就释放了,不能再继续使用,但是指针可以!!

总之,指针和迭代器是有很大差别的,虽然他们表现的行为相似,但是本质是不一样的!一个是类模板,一个是存放一个家伙的地址的指针变量。 

//转自:https://blog.csdn.net/weixin_39777226/article/details/79192770

相关标签: c++ vector