用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;
}
然后定义两个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中如何显示数组元素等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)