【问题标题】:erasing elements from a multidimensional vector从多维向量中擦除元素
【发布时间】:2016-11-29 21:40:56
【问题描述】:

我正在尝试使用iterator 从 3D 矢量中删除一些旧数据。这是我的一段代码,与此相关:

vector< vector<vector <int> > > vol;
vector< vector< vector<int> > >::iterator row;
vector< vector<int> >::iterator col;
vector<int>::iterator dep;

for (row = this->vol.begin(); row != this->vol.end(); ++row)
{
    for (col = row->begin(); col != row->end(); ++col)
    {
        for (dep = col->begin(); dep != col->end(); ++dep)
        {
        if ( *dep <= date - 10) {

            dep = this->vol.erase( dep );
        }
    }
}

但我得到编译器错误:

no matching function for call to ‘std::vector<std::vector<std::vector<int> > >::erase(std::vector<int>::iterator&)’

我做错了什么?

谢谢

【问题讨论】:

    标签: c++ vector iterator erase


    【解决方案1】:

    您正试图在 vol 上调用擦除以覆盖整个容器。您需要做的是在dep 所属的向量上调用擦除。由于dep 指向col 指向的向量的一个元素,因此您需要的是

    if ( *dep <= date - 10) {
        dep = col->erase( dep );
    }
    

    【讨论】:

    • 谢谢内森。如果我需要删除第三维中的所有元素而不是一个怎么办?
    • @em.ech 如果你想清除col 代表的整个向量,那么你只需要col-&gt;clear();
    【解决方案2】:

    dep 是最内层向量元素之一中的元素的迭代器,您正试图使用​​它来擦除最外层向量中的元素。

    试试:

    dep = col->erase(dep);
    

    【讨论】:

      【解决方案3】:

      volvector&lt; vector&lt;vector &lt;int&gt; &gt; &gt;,而 depvector&lt;int&gt; 上的迭代器。只有vector&lt; vector&lt;vector &lt;int&gt; &gt; &gt; 上的迭代器可以用作vol-&gt;erase 的参数。

      此外,您不能在编写向量时使用 for 循环从向量中删除项目。 while 循环应该是首选,因为迭代器只有在没有删除项目时才应该递增。

      【讨论】:

        猜你喜欢
        • 2021-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多