开始学习和使用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. 11.Events

    1.A type that defines an event member allows the type (or instances of the type) to notify other obj ...

  2. ALV详解:Function ALV(二)

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  3. Socket&GCDAsyncSocket(异步Socket)

    Socket ********************************************* 简单理解Socket 就是网络连接,可以实现两个点之间的数据通讯. •Socket允许使用长连 ...

  4. 《FLASH CC 2015 CANVAS 中文教程》——3、this关键字 入门

    注::如果你对 FLASH 这个软件操作不够熟悉,建议你可以先看看FLASH动画之类的书. :FLASH CC 在文中直接简称为CC. :以下所以文章中所说的快捷键 如果你按了不起作用,请检查是否有其 ...

  5. linux使用脚本自动连接数据库

    脚本名: mtest1.sh #!/bin/bash # test connecting to the Mysql server MYSQL=`which mysql` $MYSQL test -u ...

  6. iOS - UISearchController

    前言 NS_CLASS_DEPRECATED_IOS(3_0, 8_0, "UISearchDisplayController has been replaced with UISearch ...

  7. [转载] iptables配置实践

    原文: http://wsgzao.github.io/post/iptables/ iptables配置实践 By wsgzao 发表于 2015-07-24 文章目录 1. 前言 2. 更新历史 ...

  8. mvn编写主代码与测试代码

    maven编写主代码与测试代码 3.2 编写主代码 项目主代码和测试代码不同,项目的主代码会被打包到最终的构件中(比如jar),而测试代码只在运行测试时用到,不会被打包.默认情况下,Maven假设项目 ...

  9. Android 中Service生命周期

    使用context.startService() 启动Service 其生命周期为context.startService() ->onCreate()- >onStart()->S ...

  10. redis web 客户端工具 redis-admin

    redis-admin是基于java的redis web客户端(redis client),以方便广大程序员使用redis为宗旨,集五种数据结构增删改查于一身. https://github.com/ ...