利用vector编写程序 求数组的最小元素

利用vector编写程序 求数组的最小元素,第1张

c++中string可以通过string.length()来获得string的长度,当对与一个数组来说就不是这么容易了。

如一个int型的数组:

int a[] = {1,2,3,5,6,9}如何获得呢?

可以通过sizeof的特殊用法,都知道sizeof()是获得所占的空间的大小,所以可以:int length = sizeof(a)/sizeof(int)来得到a数组的元素个数。

1.vector 的数据的存入和输出:

#include<stdio.h>

#include<vector>

#include <iostream>

using namespace std

void main()

{

int i = 0

vector<int>v

for( i = 0i <10i++ )

{

v.push_back( i )//把元素一个一个存入到vector中

}

/* v.clear()*/ 对存入的数据清空

for( i = 0i <v.size()i++ )//v.size() 表示vector存入元素的个数

{

cout <<v[ i ] <<" "//把每个元素显示出来

}

cont <<endl

}

注:你也可以用v.begin()和v.end() 来得到vector开始的和结束的元素地址的指针位置。你也可以这样做:

vector<int>::iterator iter/*iterator 抽象了指针的绝大部分基本特征*/

for( iter = v.begin()iter != v.end()iter++ )

{

cout <<*iter <<endl

}

2. 对于二维vector的定义。

1)定义一个10个vector元素,并对每个vector符值1-10。

#include<stdio.h>

#include<vector>

#include <iostream>

using namespace std

void main()

{

int i = 0, j = 0

//定义一个二维的动态数组,有10行,每一行是一个用一个vector存储这一行的数据。

所以每一行的长度是可以变化的。之所以用到vector<int>(0)是对vector初始化,否则不能对vector存入元素。

vector<vector<int>>Array( 10, vector<int>(0) )

for( j = 0j <10j++ )

{

for ( i = 0i <9i++ )

{

Array[ j ].push_back( i )

}

}

for( j = 0j <10j++ )

{

for( i = 0i <Array[ j ].size()i++ )

{

cout <<Array[ j ][ i ] <<" "

}

cout<<endl

}

}

2)定义一个行列都是变化的数组。

#include<stdio.h>

#include<vector>

#include <iostream>

using namespace std

void main()

{

int i = 0, j = 0

vector<vector<int>>Array

vector<int >line

for( j = 0j <10j++ )

{

Array.push_back( line )//要对每一个vector初始化,否则不能存入元素。

for ( i = 0i <9i++ )

{

Array[ j ].push_back( i )

}

}

for( j = 0j <10j++ )

{

for( i = 0i <Array[ j ].size()i++ )

{

cout <<Array[ j ][ i ] <<" "

}

cout<<endl

}

}

使用 vettor erase 指定元素

#include "iostream"

#include "vector"

using namespace std

int main()

{

vector<int> arr

arr.push_back(6)

arr.push_back(8)

arr.push_back(3)

arr.push_back(8)

for(vector<int>::iterator it=arr.begin()it!=arr.end())

{

if(* it == 8)

{

it = arr.erase(it)

}

else

{

++it

}

}

cout <<"After remove 8:/n"

for(vector<int>::iterator it = arr.begin()it <arr.end()++it)

{

cout <<* it <<" "

}

cout <<endl

}

#include <iostream>

#include <algorithm>

#include <functional>

#include <vector>

using namespace std

void main()

{

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

vector<int>ivector(iarray,iarray+sizeof(iarray)/sizeof(int))

int iarray1[]={6,6}

vector<int>ivector1(iarray1,iarray1+sizeof(iarray1)/sizeof(int))

int iarray2[]={5,6}

vector<int>ivector2(iarray2,iarray2+sizeof(iarray2)/sizeof(int))

int iarray3[]={0,1,2,3,4,5,7,7,7,9,7}

vector<int>ivector3(iarray3,iarray3+sizeof(iarray3)/sizeof(int))

//找出ivector之中相邻元素值相等的第一个元素

cout<<*adjacent_find(ivector.begin(),ivector.end())<<endl

//找出ivector之中元素值为6的元素个数

cout<<count(ivector.begin(),ivector.end(),6)<<endl

//找出ivector之中小于7的元素个数

cout<<count_if(ivector.begin(),ivector.end(),bind2nd(less<int>(),7))<<endl

//找出ivector之中元素值为4的第一个元素所在位置的元素

cout<<*find(ivector.begin(),ivector.end(),4)<<endl

//找出ivector之中大于2的第一个元素所在位置的元素

cout<<*find_if(ivector.begin(),ivector.end(),bind2nd(greater<int>(),2))

<<endl

//找出ivector之中子序列ivector1所出现的最后一个位置,再往后3个位置的元素

cout<<*(find_end(ivector.begin(),ivector.end(),ivector1.begin(),

ivector1.end())+3)<<endl

//找出ivector之中子序列ivector1所出现的第一个位置,再往后3个位置的元素

cout<<*(find_first_of(ivector.begin(),ivector.end(),ivector1.begin(),

ivector1.end())+3)<<endl

//子序列ivector2在ivector中出现的起点位置元素

cout<<*search(ivector.begin(),ivector.end(),ivector2.begin(),ivector2.end())

<<endl

//查找连续出现3个6的起点位置元素

cout<<*search_n(ivector.begin(),ivector.end(),3,6,equal_to<int>())<<endl

//判断两个区间ivector和ivector3相等否(0为假,1为真)

cout <<equal(ivector.begin(), ivector.end(), ivector3.begin()) <<endl

//查找区间ivector3在ivector中不匹配点的位置

pair<int*,int*>result=mismatch(ivector.begin(),ivector.end(),ivector3.begin())

cout<<result.first - ivector.begin() <<endl

}

#include <iostream>

#include <algorithm>

#include <functional>

#include <vector>

using namespace std

class even_by_two{ //类定义形式的函数对象

public:

int operator()() const

{return _x+=2}

private:

static int _x

}

int even_by_two::_x=0 //静态数据成员初始化

void main()

{

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

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

vector<int>ivector(iarray,iarray+sizeof(iarray)/sizeof(int))

vector<int>ivector1(iarray+6,iarray+8)

vector<int>ivector2(iarray1,iarray1+sizeof(iarray1)/sizeof(int))

ostream_iterator<int >output( cout, " " )//定义流迭代器用于输出数据

//迭代遍历ivector1区间,对每一个元素进行even_by_two *** 作

generate(ivector1.begin(),ivector1.end(),even_by_two())

copy(ivector1.begin(),ivector1.end(),output)

cout<<endl

//迭代遍历ivector的指定区间(起点和长度),对每一个元素进行even_by_two *** 作

generate_n(ivector.begin(),3,even_by_two())

copy(ivector.begin(),ivector.end(),output)

cout<<endl

//删除元素6

remove(ivector.begin(),ivector.end(),6)

copy(ivector.begin(),ivector.end(),output)

cout<<endl

//删除(实际并未从原序列中删除)元素6,结果置于另一个区间

vector<int>ivector3(12)

remove_copy(ivector.begin(),ivector.end(),ivector3.begin(),6)

copy(ivector3.begin(),ivector3.end(),output)

cout<<endl

//删除(实际并未从原序列中删除)小于6的元素

remove_if(ivector.begin(),ivector.end(),bind2nd(less<int>(),6))

copy(ivector.begin(),ivector.end(),output)

cout<<endl

//删除(实际并未从原序列中删除)小于7的元素,结果置于另一个区间,

remove_copy_if(ivector.begin(),ivector.end(),ivector3.begin(),

bind2nd(less<int>(),7))

copy(ivector3.begin(),ivector3.end(),output)

cout<<endl

//将所有的元素值6,改为元素值3

replace(ivector.begin(),ivector.end(),6,3)

copy(ivector.begin(),ivector.end(),output)

cout<<endl

//将所有的元素值3,改为元素值5,结果放置到另一个区间

replace_copy(ivector.begin(),ivector.end(),ivector3.begin(),3,5)

copy(ivector3.begin(),ivector3.end(),output)

cout<<endl

//将所有小于5的元素值,改为元素值2

replace_if(ivector.begin(),ivector.end(),bind2nd(less<int>(),5),2)

copy(ivector.begin(),ivector.end(),output)

cout<<endl

//将所有的元素值8,改为元素值9,结果放置到另一个区间

replace_copy_if(ivector.begin(),ivector.end(),ivector3.begin(),

bind2nd(equal_to<int>(),8),9)

copy(ivector3.begin(),ivector3.end(),output)

cout<<endl

//逆向重排每一个元素

reverse(ivector.begin(),ivector.end())

copy(ivector.begin(),ivector.end(),output)

cout<<endl

//逆向重排每一个元素,结果置于另一个区间

reverse_copy(ivector.begin(),ivector.end(),ivector3.begin())

copy(ivector3.begin(),ivector3.end(),output)

cout<<endl

//旋转(互换元素)[first,middle), 和[middle,end)

rotate(ivector.begin(),ivector.begin()+4,ivector.end())

copy(ivector.begin(),ivector.end(),output)

cout<<endl

//旋转(互换元素)[first,middle], 和[middle,end],结果置于另一个区间,

rotate_copy(ivector.begin(),ivector.begin()+5,ivector.end(),

ivector3.begin())

copy(ivector3.begin(),ivector3.end(),output)

cout<<endl

}

#include <iostream>

#include <algorithm>

#include <functional>

#include <vector>

using namespace std

void main()

{

int iarray[]={26,17,15,22,23,33,32,40}

vector<int>ivector(iarray,iarray+sizeof(iarray)/sizeof(int))

// 查找并输出最大、最小值元素

cout<<*max_element(ivector.begin(),ivector.end())<<endl

cout<<*min_element(ivector.begin(),ivector.end())<<endl

//将ivector.begin()+4-ivector.begin()各元素排序,

//放进[ivector.begin(),ivector.begin()+4]区间。剩余元素不保证维持原来相对次序

partial_sort(ivector.begin(),ivector.begin()+3,ivector.end())

copy(ivector.begin(),ivector.end(),ostream_iterator<int>(cout," "))

cout<<endl

//局部排序并复制到别处

vector<int>ivector1(5)

partial_sort_copy(ivector.begin(),ivector.end(),ivector1.begin(),

ivector1.end())

copy(ivector1.begin(),ivector1.end(),ostream_iterator<int>(cout," "))

cout<<endl

//排序,缺省为递增。

sort(ivector.begin(),ivector.end())

copy(ivector.begin(),ivector.end(),ostream_iterator<int>(cout," "))

cout<<endl

//将指定元素插入到区间内不影响区间原来排序的最低、最高位置

cout<<*lower_bound(ivector.begin(),ivector.end(),24)<<endl

cout<<*upper_bound(ivector.begin(),ivector.end(),24)<<endl

//对于有序区间,可以用二分查找方法寻找某个元素

cout<<binary_search(ivector.begin(),ivector.end(),33)<<endl

cout<<binary_search(ivector.begin(),ivector.end(),34)<<endl

//下一个排列组合

next_permutation(ivector.begin(),ivector.end())

copy(ivector.begin(),ivector.end(),ostream_iterator<int>(cout," "))

cout<<endl

//上一个排列组合

prev_permutation(ivector.begin(),ivector.end())

copy(ivector.begin(),ivector.end(),ostream_iterator<int>(cout," "))

cout<<endl

//合并两个序列ivector和ivector1,并将结果放到ivector2中

vector<int>ivector2(13)

merge(ivector.begin(),ivector.end(),ivector1.begin(),ivector1.end(),

ivector2.begin())

copy(ivector2.begin(),ivector2.end(),ostream_iterator<int>(cout," "))

cout<<endl

//将小于*(ivector.begin()+5)的元素放置在该元素之左

//其余置于该元素之右。不保证维持原有的相对位置

nth_element(ivector2.begin(),ivector2.begin()+5,ivector2.end())

copy(ivector2.begin(),ivector2.end(),ostream_iterator<int>(cout," "))

cout<<endl

//排序,并保持原来相对位置

stable_sort(ivector2.begin(),ivector2.end())

copy(ivector2.begin(),ivector2.end(),ostream_iterator<int>(cout," "))

cout<<endl

//针对一个有序区间,找出其中一个子区间,其中每个元素都与某特定元素值相同

pair<vector<int>::iterator,vector<int>::iterator>pairIte

pairIte=equal_range(ivector2.begin(),ivector2.end(),22)

cout<<*(pairIte.first)<<endl

cout<<*(pairIte.second)<<endl

//合并两个有序序列,然后就地替换

int iarray3[] = { 1, 3, 5, 7, 2, 4, 6, 8 }

vector<int>ivector3(iarray3,iarray3+sizeof(iarray3)/sizeof(int))

inplace_merge(ivector3.begin(), ivector3.begin()+ 4, ivector3.end())

copy(ivector3.begin(),ivector3.end(), ostream_iterator<int>(cout, " "))

cout<<endl

//以字典顺序比较序列ivector3和ivector4

int iarray4[] = { 1, 3, 5, 7,1, 5, 9, 3 }

vector<int>ivector4(iarray4,iarray4+sizeof(iarray4)/sizeof(int))

cout<<lexicographical_compare(ivector3.begin(),ivector3.end(),

ivector4.begin(),ivector4.end()) <<endl

}

这个是百度百科上的,我觉得挺 详细的,希望有帮到你

在JAVA中的详细说明

Java.util.Vector提供了向量(Vector)类以实现类似动态数组的功能。在Java语言中是没有指针概念的,但如果能正确灵活地使用指针又确实可以大大提高程序的质量,比如在C、C++中所谓“动态数组”一般都由指针来实现。为了弥补这点缺陷,Java提供了丰富的类库来方便编程者使用,Vector类便是其中之一。事实上,灵活使用数组也可完成向量类的功能,但向量类中提供的大量方法大大方便了用户的使用。 相对于ArrayList来说,Vector线程是安全的,也就是说是同步的 创建了一个向量类的对象后,可以往其中随意地插入不同的类的对象,既不需顾及类型也不需预先选定向量的容量,并可方便地进行查找。对于预先不知或不愿预先定义数组大小,并需频繁进行查找、插入和删除工作的情况,可以考虑使用向量类。向量类提供了三种构造方法: public vector() public vector(int initialcapacity,int capacityIncrement) public vector(int initialcapacity) 使用第一种方法,系统会自动对向量对象进行管理。若使用后两种方法,则系统将根据参数initialcapacity设定向量对象的容量(即向量对象可存储数据的大小),当真正存放的数据个数超过容量时,系统会扩充向量对象的存储容量。 参数capacityIncrement给定了每次扩充的扩充值。当capacityIncrement为0时,则每次扩充一倍。利用这个功能可以优化存储。在Vector类中提供了各种方法方便用户使用:

插入功能

(1)public final synchronized void addElement(Object obj) 将obj插入向量的尾部。obj可以是任何类的对象。对同一个向量对象,可在其中插入不同类的对象。但插入的应是对象而不是数值,所以插入数值时要注意将数值转换成相应的对象。 例 要插入一个整数1时,不要直接调用v1.addElement(1),正确的方法为: Vector v1=new Vector()Integer integer1=new Integer(1)v1.addElement(integer1)(2)public final synchronized void setElementAt(object obj,int index) 将index处的对象设成obj,原来的对象将被覆盖。 (3)public final synchronized void insertElementAt(Object obj,int index) 在index指定的位置插入obj,原来对象以及此后的对象依次往后顺延。

删除功能

(1)public final synchronized void removeElement(Object obj) 从向量中删除obj。若有多个存在,则从向量头开始试,删除找到的第一个与obj相同的向量成员。 (2)public final synchronized void removeAllElement() 删除向量中所有的对象。 (3)public final synchronized void removeElementlAt(int index) 删除index所指的地方的对象。

查询搜索功能

(1)public final int indexOf(Object obj) 从向量头开始搜索obj ,返回所遇到的第一个obj对应的下标,若不存在此obj,返回-1。 (2)public final synchronized int indexOf(Object obj,int index) 从index所表示的下标处开始搜索obj。 (3)public final int lastIndexOf(Object obj) 从向量尾部开始逆向搜索obj。 (4)public final synchronized int lastIndexOf(Object obj,int index) 从index所表示的下标处由尾至头逆向搜索obj。 (5)public final synchronized Object firstElement() 获取向量对象中的首个obj。 (6)public final synchronized Object lastelement() 获取向量对象中的最后一个obj。

实例

了解了向量的最基本的方法后,我们来看一下例子VectorApp.java。 例 VectorApp.java import java.util.Vectorimport java.lang.*//这一句不应该要,但原文如此 import java.util.Enumerationpublic class VectorApp { public static void main(String[] args) { Vector v1=new Vector()Integer integer1=new Integer(1)v1.addElement("one")//加入的为字符串对象  v1.addElement(integer1)v1.addElement(integer1)//加入的为Integer的对象  v1.addElement("two")v1.addElement(new Integer(2))v1.addElement(integer1)v1.addElement(integer1)System.out.println("The vector v1 is:\n\t"+v1)//将v1转换成字符串并打印  v1.insertElementAt("three",2)v1.insertElementAt(new Float(3.9),3)System.out.println("The vector v1(used method insertElementAt())is:\n\t "+v1)//往指定位置插入新的对象, 指定位置后的对象依次往后顺延  v1.setElementAt("four",2)System.out.println("The vector v1(used method setElementAt())is:\n\t "+v1)//将指定位置的对象设置为新的对象  v1.removeElement(integer1)//从向量对象v1中删除对象integer1由于 存在多个integer1所以从头开始 找,删除找到的第一个integer1 Enumeration enum=v1.elements()System.out.print("The vector v1(used method removeElement())is:")while(enum.hasMoreElements()) System.out.print(enum.nextElement()+" ")System.out.println()//使用枚举类(Enumeration) 的方法来获取向量对象的每个元素  System.out.println("The position of object 1(top-to-bottom):" + v1.indexOf(integer1))System.out.println("The position of object 1(tottom-to-top):" +v1.lastIndexOf(integer1))//按不同的方向查找对象integer1所处的位置  v1.setSize(4)System.out.println("The new vector(resized the vector)is:"+v1)//重新设置v1的大小,多余的元素被行弃  } } 运行结果: E:\java01>java VectorApp The vector v1 is: [one, 1, 1, two, 2, 1, 1] The vector v1(used method insertElementAt())is: [one, 1, three, 3.9, 1, two, 2, 1, 1] The vector v1(used method setElementAt()) is: [one, 1, four, 3.9, 1, two, 2, 1, 1] The vector v1(used method removeElement())is: one four 3.9 1 two 2 1 1 The position of object 1(top-to-bottom):3 The position of object 1(tottom-to-top):7 The new vector(resized the vector)is: [one, four, 3.9, 1] E:\java01>从例1中运行的结果中可以清楚地了解上面各种方法的作用,另外还有几点需解释。 (1)类Vector定义了方法 public final int size() 此方法用于获取向量元素的个数。它的返回值是向是中实际存在的元素个数,而非向量容量。可以调用方法capactly()来获取容量值。 方法: public final synchronized void setsize(int newsize) 此方法用来定义向量大小。若向量对象现有成员个数已超过了newsize的值,则超过部分的多余元素会丢失。 (2)程序中定义了Enumeration类的一个对象 Enumeration是java.util中的一个接口类,在Enumeration中封装了有关枚举数据集合的方法。 在Enumeration中提供了方法hawMoreElement()来判断集合中是否还有其它元素和方法nextElement()来获取下一个元素。利用这两个方法可以依次获得集合中元素。 Vector中提供方法: public final synchronized Enumeration elements() 此方法将向量对象对应到一个枚举类型。java.util包中的其它类中也大都有这类方法,以便于用户获取对应的枚举类型。

c++中,vector作为容器,它的作用是:用来存放结构体struct类型的变量。以下是vector的具体用法:

工具/材料:电脑、c++编译器

1、首先构造一个int类型的空vector向量。

2、可以看到vector的size为0。

3、接着构造了6个元素值为20的vector向量。

4、成功的构造了6个元素为20的向量。

5、同样也将对象复制给另一个vector对象。

6、以下就是程序运行结果了。

相关信息

C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。

C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。

C++不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8125795.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存