c++ - 比较 vector 中元素的最有效和最快的方法?

标签 c++ boost vector iterator

使用两个迭代器比较类 vector 中元素的最有效和最快的方法是什么?该 vector 不是可排序的 vector ,我有一个重载的“>”运算符用于该类。我使用 boost foreach 进行简单的 vector 迭代。

我正在做与下面给出的类似的事情。

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++;
    }               

谢谢。

最佳答案

最棘手的部分是避免遇到无效的迭代器:

v.erase(std::remove_if(v.begin(), v.end(), [j](T const &i) { return i > j; });

也可以使用循环,但在那种情况下使用反向迭代器

PS:我无法理解您实际上想要在您的算法中实现什么

你可能感兴趣

关于c++ - 比较 vector 中元素的最有效和最快的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13612677/

相关文章:

c++ - 在 C++ 上使用 vector<vector<int>> 读取错误的矩阵

c++ - 字符串 argv[] 重定义错误 C++

c++ - 使用 Boost::spirit 编写的解析器的性能问题

c++ - 如何以编程方式查找进程的所有文件句柄?

c++ - 如何在 Q-learning 中计算 MaxQ?

c++ - 加载共享库时出错 : libboost_program_options. so.1.65.1

c++ - 在udp套接字上 boost asio多个async_send

c++ - 定义生成元素 vector 的函数时正确的方法是什么 C++

c++ - 如何使用 boost::bind 为 std::set 定义排序标准

C++ - 混洗对象 vector