Vector的相关内容

1 篇文章 0 订阅

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的关键所在,通过迭代器,容器和算法可以有机的粘合在一起,只要对算法给予不同的迭代器,就可以对不同容器进行相同的操作。 
指针: 
指针能指向函数而迭代器不行,迭代器只能指向容器;指针是迭代器的一种。指针只能用于某些特定的容器;迭代器是指针的抽象和泛化。所以,指针满足迭代器的一切要求。 
:迭代器在使用后就释放了,不能再继续使用,但是指针可以!!

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

 


#include <iostream>
#include<vector>
using namespace std;
 
void main(){
 
    vector<int> the_vector;
    vector<int>::iterator the_iterator;
 
    for (int i = 0; i < 10; i++)
        the_vector.push_back(i);
 
    int total = 0;
    the_iterator = the_vector.begin();
    while (the_iterator != the_vector.end()) {
        total += *the_iterator;
        the_iterator++;
    }
    cout << "Total=" << total << endl;
    printf("hello...\n");
    system("pause");
    return;
}

运行结构为:Total=45

                      hello.....

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值