#include <vector>

1/31:sort(左迭代器,右迭代器,排序方法);
其中排序方法bool myfunction (int i,int j) { return (i<j); }此处是降序
感觉和qsort差不多,如果是结构体的话就
bool cmp(NODE* a,NODE *b){return(a.number>b.number);}
//另外今天又忘了v.end()是最后一个元素的后一个了。


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的元素

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

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

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


野指针

使用insert、erase、push_back的时候很容易iterator乱指啊,要小心


很粗浅的一些知识,以后需要深入了解的话会有所补充的(如果不懒的话(逃


复制粘贴的出处都在这里了~
1.https://www.cnblogs.com/cxq0017/p/6555533.html
2.https://www.cnblogs.com/yoke/p/6080080.html
3.http://blog.csdn.net/gogokongyin/article/details/51206225

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值