【发布时间】:2012-11-16 18:04:21
【问题描述】:
使用两个迭代器比较类向量中元素的最有效和最快的方法是什么?向量不是可排序的,我有一个重载的 ">" 类的运算符。我使用 boost foreach 进行简单的向量迭代。
我正在做与下面给出的类似的事情。
vector<TestClass*> vec;
vector<TestClass*>::iterator jIter;
bool isErased=false;
vector<TestClass*>::iterator iIter = vec.begin();
if(!vec.empty()){
while(iIter < vec.end()-1) {
isErased = false;
for (jIter = iIter+1; jIter < vec.end();jIter++) {
if((*(*iIter))<=(*(*jIter))) {
delete *jIter;
jIter = vec.erase(jIter);
jIter--;
}
else if((*(*iIter))>=(*(*jIter))) {
delete *iIter;
iIter = vec.erase(iIter);
isErased = true;
break;
}
}
if(!isErased) iIter++;
}
谢谢。
【问题讨论】:
-
这段代码应该做什么?
-
如果我不得不猜测,我会说 OP 正在尝试查看向量中的每个元素是否与 任何 其他元素匹配,并删除那些只存在一次的元素。跨度>
-
做某事最有效、最快的方法就是不做。如果你用向量做的事情很慢,不要使用向量。至于查找数组的最大元素,使用 std::max_element(vec.begin(), vec.end());
-
鉴于目前的形式无法准确确定 OP 希望达到的目标,我不明白为什么这个问题会吸引投票。
-
为什么不能排序?你为什么使用
vector?如果你想要唯一性,那么你应该使用一个提供它的容器(比如set或map,或者至少是一个sortedvector。