二维向量的迭代器

时间:2017-10-25 02:42:32

标签: c++ vector iterator

我有一个函数可以删除未排序的向量中的重复项,保持未排序:

int unsortedRemoveDuplicates(std::vector<int>& numbers)
{
std::set<int> seenNums; //log(n) existence check

auto itr = begin(numbers);
while(itr != end(numbers))
{
    if(seenNums.find(*itr) != end(seenNums)) //seen? erase it
        itr = numbers.erase(itr); //itr now points to next element
    else
    {
        seenNums.insert(*itr);
        itr++;
    }
}

    return seenNums.size();
}

但是我希望将它用于初始化为

的二维向量
vector<vector<int>> numbers;

并且该函数仅从传递给函数的行号确定的一行中删除重复项。

我已经尝试将迭代器itr更改为

auto itr = begin(numbers[row]);
while(itr != end(numbers[row]))....

其中row被传递到函数中,但是这只会产生一个seg错误,所以我在这里停留,让它迭代一行。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

不要过度思考。只需迭代外部向量并将每个内部向量传递给函数。

for (auto& each_row : numbers)
    unsortedRemoveDuplicates(each_row);