none
victor<struct>如何删除符合条件的元素 RRS feed

  • 问题

  • struct INFO
    {
            int a = 0;
            int b = 0;
    };
    
    class std::vector<INFO> G;
    
    int main()
    {
    
            for (int i = 0; i < 10; i++)
            {
    
                    INFO Data;
                    Data.a = i + 100;//实际应用时是不确定的
                    Data.b = i + 10;//实际应用时是不确定的
                    G.push_back(Data);
            }
            std::cout <<"G.size:"<< G.size()<<std::endl;
    //元素有了,如何以条件符合的方式删除某元素,例如 G[i].a ==100 
    }


    2019年6月8日 12:37

全部回复

  • vector是数组,一个个删要重排剩下的元素,速度极其慢。可以遍历vector,把符合条件的元素加入链表(链表插入删除元素速度最快)然后最后直接使用链表,或者把链表的数据再复制到一个vector。



    Visual C++ MVP

    2019年6月8日 13:46
    版主
  • 你好,

    感谢你在MSDN论坛发帖。

    对于你的情况推荐你使用vector::earse方法来删除特定元素,我在你的代码基础之上新增了部分代码帮助你实现删除功能。以下是迭代器和删除方法的官方文档链接和我的代码,供你参考。

    https://docs.microsoft.com/zh-cn/cpp/standard-library/vector-class?view=vs-2019#erase

    https://docs.microsoft.com/zh-cn/cpp/standard-library/vector-class?view=vs-2019#iterator

    struct INFO
    {
    	int a = 0;
    	int b = 0;
    };
    
    class std::vector<INFO> G;
    
    int out(std::vector<INFO> iVec)
    {
    	std::cout << "INFO.a:";
    	for (int i = 0; i < iVec.size(); i++)
    	{
    		std::cout <<iVec[i].a<<" ";
    	}
    	std::cout << std::endl;
    	std::cout << "INFO.b:";
    	for (int i = 0; i < iVec.size(); i++)
    	{
    		std::cout << iVec[i].b << " ";
    	}
    	std::cout << std::endl;
    	return 0;
    }
    
    int main()
    {
    	
    	for (int i = 0; i < 10; i++)
    	{
    
    		INFO Data;
    		Data.a = i + 100;//实际应用时是不确定的
    		Data.b = i + 10;//实际应用时是不确定的
    		G.push_back(Data);
    	}
    	out(G);
    	//元素有了,如何以条件符合的方式删除某元素,例如 G[i].a ==100 
    
    	std::vector<INFO>::iterator it;
    
    	for (it = G.begin(); it != G.end();)
    	{
    		if (it->a==100)
    		{
    			it = G.erase(it);
    		}
    		else
    		{
    			++it;
    		}
    	}
    	out(G);
    	return 0;
    }

    Best Regards,

    Suarez Zhou


    2019年6月10日 4:14
  • 你好,

    你的问题还有任何需要更新的内容吗? 如果您的案例已经解决,请帮助标记答案。 如果没有,请随时与我们联系。对于您的理解与合作,我们将不胜感激。

    Best Regards,

    Suarez Zhou


    2019年6月11日 5:48