C++中,vector参数为类型时,如何查找和添加元素

C++中,vector参数为类型时,如何查找和添加元素,第1张

用stl的算法find_if,functor做谓词,感觉更简练一些

#include <iostream>

#include <string>

#include <vector>

using namespace std;

struct Table {

Table(const int n, const string& s, const int c):NUM(n),CI(s),count(c){}

int NUM;

string CI;

int count;

};

class TheTable {

int NUM;

public:

TheTable(int i):NUM(i) {}

bool operator()(Table& t) {

return tNUM == NUM;

}

};

int main () {

std::vector<Table> myvector;

Table t0(1, "hello", 2), t1(2, "world", 3);

myvectorpush_back(t0);

myvectorpush_back(t1);

for (int i=0; i<3; ++i) {

vector<Table>::iterator it = find_if(myvectorbegin(), myvectorend(), TheTable(i));

if (it == myvectorend())

cout << "Not found" << endl;

else {

std::cout << "MyTable " << (it)CI << '\n';

++(it)count;

}

}

return 0;

}

先对两个vector中的元素都按从大到小的顺序排序

然后定义两个iterator,分别指向两个vector的头部

vector<int> first;

vector<int> second;

vector<int>::iterator poiFir;

vector<int>::iterator poiSec;

poiFir=firstbegin();

poiSec=secondbegin();

然后循环直到poiFir指向first的尾部或poiSec指向second的尾部

每次循环的内部:

判断poiFir和poiSec的大小

(1)若相等,则为相同的元素,记录此值(可以另建一个vector<int> save用于存放相等的值,savepush_back(poiFir)),再将poiFir++;poiSec++;

(2)若poiFir大于poiSec的值,则将poiSec++;

(3)若poiFir小于poiSec的值,则将poiFir++;

循环结束后,save中存储的值即为两个vector中相等的值

时间效率为两个vector中元素个数的和

vector<int >这样vector里面的元素是指针,指向外面的空间,在这里所有元素指向a[]数组,它们共享空间。造成这种情况。

可以修改成:

class pos

{

public:

int x, y;

pos(int xx, int yy):x(xx),y(yy){}

};

vector<pos> Position;

这样压入新坐标时可以

Positionpush_back( pos(2, 3));就压入一个新坐标(2,3)

Position[i]x来访问横坐标

嗯,可以用下标值:如vector<int>

a;

a[i]就可以读取下标为i的元素值

或者使用迭代器

vecotr<int>::iterator

i;

i就可以读取下标注为i的元素值

说具体些呀,包含的是什么元素

vector中的元素是用get(i);方法取出来的,得到Object对象,你再根据自己的需要,把它强转成你要的类型,再调用那个类中方法取出来,就得到了呀,基本跟二楼的兄弟说的一样

Vector是一个容器,可以容纳不同类型的对象,数组也可以。

比如有个int型数组: int data1[] = { 1, 2, 3 };

放入vector:vaddElement(data1);

然后可以这么取:

for(int integer:(int [])velementAt(i) ){

Systemoutprintln(integer);

}

完整的例子如下:

import javautilVector;

class Test{

public static void main(String args[]) {

   //定义整形数组:

 int data1[] = { 1, 2, 3 };

 int data2[] = { 4, 5, 6 };

 int data3[] = { 7, 8, 9 };

 //定义一个vector容器对象

 Vector v = new Vector();

  //向容器中放数组

 vaddElement(data1);

 vaddElement(data2);

 vaddElement(data3);

  //开始循环迭代数组对象

 for (int i = 0; i < vsize(); i++) {

  Systemoutprintln("----------");

  //由于没有用泛型,这里需要类型强制转化,转换为int[]才可以遍历出来

  for(int integer:(int [])velementAt(i) ){ 

   Systemoutprintln(integer);

  }

 }

}

}

vector可以像数组一样访问,所以你可以用vector[1],vector[2],这样的方式去访问。或者可以使用迭代器vector::iterator去访问,这里就不具体介绍了。

以上就是关于C++中,vector参数为类型时,如何查找和添加元素全部的内容,包括:C++中,vector参数为类型时,如何查找和添加元素、如何获取两个vector中相同的元素、c++ Vector中如何显示数组元素等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/web/9618391.html

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

发表评论

登录后才能评论

评论列表(0条)

保存