vector 初始化 与遍历

#include <vector>

#include <list>

#include <string>

#include <iostream>

using namespace std;

void main()

{

vector<int>::iterator int_ite;

vector<string>::iterator string_ite;

//vector<T> v(n,i)形式,v包含n 个值为 i 的元素

vector<int> ivec(10,0);

for(int_ite=ivec.begin ();int_ite!=ivec.end ();int_ite++)

cout<<"ivec: "<<*int_ite<<endl;

//vector<T> v(v1)形式,v是v1 的一个副本

vector<int> ivec1(ivec);

for(int_ite=ivec1.begin ();int_ite!=ivec1.end ();int_ite++)

cout<<"ivec1: "<<*int_ite<<endl;

//vector<T> v(n)形式,v包含n 个值初始化的元素

vector<int> ivec2(10);

for(int_ite=ivec2.begin ();int_ite!=ivec2.end ();int_ite++)

cout<<"ivec2: "<<*int_ite<<endl;

//vector<T> v(n)形式,v包含n 个值初始化的元素

vector<string> svec(10);

for(string_ite=svec.begin ();string_ite!=svec.end ();string_ite++)

cout<<"svec: "<<*string_ite<<endl;

//数组初始化vector

int iarray[]={1,2,3,4,5,6,7,8,9,0};

//count: iarray数组个数

size_t count=sizeof(iarray)/sizeof(int);

//int数组初始化 ivec3

vector<int> ivec3(iarray,iarray+count);

for(int_ite=ivec3.begin ();int_ite!=ivec3.end ();int_ite++)

cout<<"ivec3: "<<*int_ite<<endl;

//string数组初始化 svec1

string word[]={"ab","bc","cd","de","ef","fe"};

//s_count: word数组个数

size_t s_count=sizeof(word)/sizeof(string);

//string数组初始化 svec1

vector<string> svec1(word,word+s_count);

for(string_ite=svec1.begin ();string_ite!=svec1.end ();string_ite++)

cout<<"svec1: "<<*string_ite<<endl;

//用 back_inserter 函数

vector<int> ivec4;  //空对象

fill_n(back_inserter(ivec4),10,3);  //10个3 填充ivec4.

for(int_ite=ivec4.begin ();int_ite!=ivec4.end ();int_ite++)

cout<<"ivec4: "<<*int_ite<<endl;

}

针对 vector , deque , list 三种容器有以下两种遍历方法

1,适用于vector 和 deque(以vector为例)

vector<int> obv(4,1);

for(int i=0; i<obv.size(); i++)

{

cout<<obv[i]<<"    ";

}

2,适用于 vector ,deque , list(以vector为例)

vector<int> obv(4,1);

vector<int>::iterator it=obv.begin();

while(it!=obv.end())

{

cout<<(*it)<<"    ";

it++;

}

本人更加推荐第二种方法!(因为适用于三种容器)

遍历vector

例如有vector<int> v1;

1 void print( int i)
2 {
3 cout << i << endl;
4 }

方式1:

1 forint i=0;
i<v1.size(); i++ )
2 {
3 print(v1[i]);
4 }

这种方式是我们最熟悉的,但是不够好,写起来不够简洁。而且对于没有随机迭代器的其他容器来说,这样做是办不到的。

方式2:

1 typedef vector<int>::
iterator VIntIterator;
2 VIntIterator end = v1.end();
3 for(
VIntIterator i=v1.begin(); i != end; ++i )
4 {
5 print( *i );
6 }

注意:先计算end有好处,因为不必要每次去重复计算end,vector的end()不是常数时间的,所以先缓存下来能提高效率。写算法的时候尽量使用!=比较迭代器,因为<对于很多非随机迭代器没有这个操作符。但是这种方式也写起来比较繁琐。

方式3:

1 for_each( v1.begin(),  v1.end(),  print );

使用算法写起来简单多了。

使用算法的时候,可以使用函数对象,例如

01 class OutPut
02 {
03 public:
04 void operator
()( double i
)
05 {
06 std::cout << i;
07
08 }
09 }
10 for_each( v1.begin(), v1.end(), OutPut );
时间: 2024-10-17 06:53:53

vector 初始化 与遍历的相关文章

vector的几种初始化和遍历

随着C++11标准的出现,vector出现了新的初始化和遍历用法,但是vs2010和较高版本并没有能完全支持C++11标准,所以我就将它的所有的用法归纳了一下. vector的初始化 vector基本初始化如下: vector< T >v1 v1是一个空的vector vector< T >v2(v1) v2包含v1所有元素,等价于vector v2=v1; vector< T >v3(n,val) v3包含了n个重复元素,每个元素是val 在C++11标准中出现了下面

*三维数组的初始化及遍历三个for循环

package com.chongrui.test; /* *三维数组的初始化及遍历 * */ public class test { public static void main(String[] args) { int a[][][]=new int[][][]{ {{1,2,3},{4,5,6}}, {{8,9,10},{11,12,13}}, {{14,15,16},{17,18,19,20}}, }; for(int i=0;i<a.length;i++){ System.out.p

Vector 初始化

Vector是对象的集合. 一.默认初始化 vectot<string> svec; //默认初始化,svec不含任何元素 二.拷贝 vector<string> svec1(svec); vector<string> svec2 = svec; 三.列表初始化 vector<string> svec{"a", "an", "the"}; 四.指定数量 vectot<string> sv

&lt;27&gt;【理解】02-结构体数组概念及定义+【掌握】03-结构数组的初始化和遍历

[理解]02-结构体数组概念及定义 结构体数组: 用来存放大量的结构体相同的结构体变量 结构体数组定义: 结构体数组定义的第一种方式: 1)定义结构体的同时,定义数组 struct Student{ int age; char *name; int s_no; float score; }stu[5]; 结构体数组定义的第二种方式 2)先定义结构体,后定义数组 struct Student boy[5]; #include <stdio.h> int main(int argc, const

第三讲.继承,完整初始化方法,遍历构造器,多态(代码) 另附植物大战僵尸练习

//初始化和遍历构造器使用 //person.h文件 1 #import <Foundation/Foundation.h> 2 3 @interface Person : NSObject 4 5 { 6 7 NSString *_name; 8 int _age; 9 NSString *_sex; 10 11 12 } 13 14 +(id)PersonWithName:(NSString*)name age:(int)age; 15 -(id)initWithName:(NSStrin

C++-二维vector初始化大小方法-备忘

来源: C++——二维vector初始化大小方法 1.直接用初始化方法 名字为vec,大小为n*m,初始值为0的二维vector. vector<vector<int> > vec(n, vector<int>(m, 0)); 2.用resize()来控制大小 vector<vector<int> > vec; vec.resize(n);//n行 for (int i = 0; i < n; ++i){ vec[i].resize(m);

vector初始化

对vector对象来说,直接初始化的方式适用于3种情况:1.初始值已知且数量少:2.初始值是另一个vector对象的副本:3.所有元素的初始值都一样.此外还有一种更常见的情况是4.创建一个vector对象时并不清楚实际所需元素的个数,元素的值也无法确定.或者元素的初值已知,但如果这些总量较大而各部相同(对于这种情况,更好的处理方法是先创建一个空vector,然后再运行时再利用vector的成员函数push_back向其中添加元素). 1.vector<T> v1 v1是一个空vector,它潜

数组(一)--- 概述、创建、初始化、遍历 ( 27th,Feb)

一.概述 定义:数组是具有相同数据类型的一组数据的集合. 分类:根据维数的不同分为一维数组.二维数组.多维数组. 二.一维数组 定义:一组相同类型数据的集合,当需要在程序中处理一组数据或者传递一组数据时,可以应用这种类型的数组. 声明并分配内存:数组元素类型 数组名[] = new 数组元素类型[数组元素的个数]: 1 //声明数组,数组长度为5 2 int [] a=new int[5]; 初始化:把数据类型包括在大括号之内,中间用逗号分开数组元素的值,系统自动为数组分配一定的空间. 1 St

二维数组的初始化,遍历

1 package com.baidu.java; 2 //2维数组的初始化 3 public class Array2 { 4 public static void main(String[] args) { 5 //1.静态初始化 6 int[][] aa=new int[][]{{3,4,5},{6,7,8,9},{1,2}}; 7 //2.1动态初始化 8 String[][] bb=new String[6][5];//想成6个小组,每个小组5个人 9 //2.2动态初始化 10 St