开始学习和使用vector了,用到之后再去学似乎神迹的感觉啊,就像跑一下就能给个糖吃哈哈

百度上的六种初始化的方法就不再说了,那些方法都很对。

如果没有值初始化,系统会自行初始化,目前我遇到的是用脚标初始化123456789...

只是不符合我的用户需求哈哈

首先,头文件

#include<vector>

然后,定义一个vector

vector<int> a;

这里,这个a可以用六种初始化的方法把它初始化了,但是我这里不用。我开始以为一定要初始化来申请内存,后来发现并不用,它在push_back的时候就会申请了。这样

for (int k=0 ; k<10;k++)
a.push_back(b[k]);

看别人的代码时候,用a[k] = b[k];类似的方法赋值,但是我这里运行是失败的,到底能不能这样写还不确定。。

遍历是用了它自带的函数

for( vector<int>::iterator iter = a.begin();iter != a.end(); ++iter, ++i )
{
c[i] = *iter;
}

因此一般的vector遍历方法如下

size_t i=0;
for(vector<double>::iterator iter = current_view.begin();iter != current_view.end(); ++iter, ++i )
{
cout<<*iter;
}

vector不能用下标直接访问赋值,否则它得到的是下标值。

可以用下标值去访问已经存在的值。

//初学C++的程序员可能会认为vector的下标操作可以添加元素,其实不然:
vector<int> ivec; // empty vector
for (vector<int>::size_type ix = ; ix != ; ++ix)
ivec[ix] = ix; // disaster: ivec has no elements
//上述程序试图在ivec中插入10个新元素,元素值依次为0到9的整数。但是,这里ivec是空的vector对象,而且下标只能用于获取已存在的元素。
//这个循环的正确写法应该是:
for (vector<int>::size_type ix = ; ix != ; ++ix)
ivec.push_back(ix); // ok: adds new element with value ix
//警告:必须是已存在的元素才能用下标操作符进行索引。通过下标操作进行赋值时,不会添加任何元素。仅能对确知已存在的元素进行下标操作

vector的空间会累计,不清空它会在前值之后赋值,因此,清空并且消除内存空洞like this:

current_view.clear();//这句话好像并没有太刻意的功能,反正我没有发现
vector<double>(current_view).swap(current_view);

以上,基本用法

附:

#include<iostream>
#include<vector>
int j;
using namespace std; int main (int argc, char **argv)
{
vector<int> a;
int b[10] = {9};
cout<<"输入数 : "<<endl;
for (int k=0 ; k<10;k++)
a.push_back(b[k]);
int *c=new int[a.size()];
size_t i=0; for( vector<int>::iterator iter = a.begin();iter != a.end(); ++iter, ++i )
{
c[i] = *iter;
}
for ( j = 0; j < a.size(); ++j)
cout << *(c + j) <<endl; delete [] c;
return 0;
}

另附:

vector对象最重要的几种操作
. v.push_back(t) 在容器的最后添加一个值为t的数据,容器的size变大。另外list有push_front()函数,在前端插入,后面的元素下标依次增大。
. v.size() 返回容器中数据的个数,size返回相应vector类定义的size_type的值。v.resize(*v.size)或 v.resize(*v.size, ) 将v的容量翻倍(并把新元素的值初始化为99)
. v.empty() 判断vector是否为空
. v[n] 返回v中位置为n的元素
. v.insert(pointer,number, content) 向v中pointer指向的位置插入number个content的内容。还有v. insert(pointer, content),v.insert(pointer,a[],a[])将a[]到a[]三个元素插入。
. v.pop_back() 删除容器的末元素,并不返回该元素。
. v.erase(pointer1,pointer2) 删除pointer1到pointer2中间(包括pointer1所指)的元素。vector中删除一个元素后,此位置以后的元素都需要往前移动一个位置,虽然当前迭代器位置没有自动加1,但是由于后续元素的顺次前移,也就相当于迭代器的自动指向下一个位置一样。
. v1==v2 判断v1与v2是否相等。
. !=、<、<=、>、>= 保持这些操作符惯有含义。
. vector<typeName>::iterator p=v1.begin( ); p初始值指向v1的第一个元素。*p取所指向元素的值。 对于const vector<typeName>只能用vector<typeName>::const_iterator类型的指针访问。
. p=v1.end( ); p指向v1的最后一个元素的下一位置。
. v.clear() 删除容器中的所有元素。
c.assign(beg,end)将[beg; end)区间中的数据赋值给c。
c.assign(n,elem)将n个elem的拷贝赋值给c。
c.at(idx)传回索引idx所指的数据,如果idx越界,抛出out_of_range。
c.back()传回最后一个数据,不检查这个数据是否存在。
c.front()传回地一个数据。
get_allocator使用构造函数返回一个拷贝。
c.rbegin()传回一个逆向队列的第一个数据。
c.rend()传回一个逆向队列的最后一个数据的下一个位置。
c.~ vector <Elem>()销毁所有数据,释放内存。

青山不改绿水依旧,下个见

C++的vector学习abc的更多相关文章

  1. c++ <vector>学习

    https://www.cnblogs.com/mr-wid/archive/2013/01/22/2871105.html 具体参考上面博客,很详细,也是看他的.今天c++学习200%,项目开发0% ...

  2. vector学习

    #include <iostream> #include <vector> #include <string.h> #include <algorithm&g ...

  3. C++ STL Vector学习 (待续)

    头文件:<vector> 初始化 vector<Elementtype> vec(); /*Elementtype是数据类型,10代表长单为10*/ vector<Ele ...

  4. C++ 中vector的基本用法

    //在网上看了好久,自己总结了一下下,第一篇博客,呼呼,学到不少 基本概念 vector容器是一个模板类,可以存放任何类型的对象).vector对象可以在运行时高效地添加元素,并且vector中元素是 ...

  5. STL vector用法

    基本操作 1.构造函数 vector():创建一个空vector vector(int nSize):创建一个vector,元素个数为nSize vector(int nSize,const t&am ...

  6. vector的几种初始化及赋值方式

    转自https://www.cnblogs.com/quyc/p/12857054.html (1)不带参数的构造函数初始化 //初始化一个size为0的vector vector<int> ...

  7. JavaSE知识概述集

    一.HelloWord(文档启动Java) /* 使用命令行的方式执行的时候,cmd的默认编码格式是GBK 因此在输入中文的时候需要设置文件的编码格式位ANSI,不会出现乱码错误 注意: 0.先用ja ...

  8. 手把手教你做个人 app

    我们都知道,开发一个app很大程度依赖服务端:服务端提供接口数据,然后我们展示:另外,开发一个app,还需要美工协助切图.没了接口,没了美工,app似乎只能做成单机版或工具类app,真的是这样的吗?先 ...

  9. [ML] Naive Bayes for email classification

    20 Newsgroups (Original) Author: Jeffrey H 1. Introduction This is only a test report for naive baye ...

随机推荐

  1. Python渗透测试工具合集

    摘自:http://www.freebuf.com/tools/94777.html 如果你热爱漏洞研究.逆向工程或者渗透测试,我强烈推荐你使用 Python 作为编程语言.它包含大量实用的库和工具, ...

  2. Codeforces Round #243 (Div. 2) B(思维模拟题)

    http://codeforces.com/contest/426/problem/B B. Sereja and Mirroring time limit per test 1 second mem ...

  3. apecceosummit2016

    https://www.apecceosummit2016.com/program.html Thursday 17 November 2016 9:00am - 9:00pm REGISTRATIO ...

  4. MediaPlayer的生命周期

  5. Android最佳性能实践(一)——合理管理内存

    有不少朋友都问过我,怎样才能写出高性能的应用程序,如何避免程序出现OOM,或者当程序内存占用过高的时候该怎么样去排查.确实,一个优秀的应用程序,不仅仅要功能完成得好,性能问题也应该处理得恰到好处.为此 ...

  6. hdu 4414 Finding crosses

    题目链接:hdu 4414 其实是一道简单的字符型水题,不涉及任何算法,可比赛时却没能做出来,这几天的状态都差到家了... 题目大意是求有多少个满足条件的十字架,十字架的边不能有分叉路口,所以枚举每个 ...

  7. [css] 认识margin

    原文链接http://www.zhangxinxu.com/wordpress/2009/08/css-margin%E7%9A%84%E7%9B%B8%E5%85%B3%E5%B1%9E%E6%80 ...

  8. nexus 2.6需要jdk7才能跑起来

    Java 6 Support EOLOracle's support for Java 6 ended in February 2013.  Consequentially as of version ...

  9. jackson反序列化时忽略不需要的字段(zhuan)

    http://www.cnblogs.com/davidwang456/p/5434071.html ********************************************* 有时候 ...

  10. css3中的过渡(transition)

    css3 transition(过渡)1.语法: transition:[ transition-property ] || [ transition-duration ] || [ transiti ...