二维向量的迭代器

Iterators over two-dimensional vectors

本文关键字:向量 迭代器 二维      更新时间:2023-10-16

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

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]))....

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

不要想太多。只需迭代外部向量并将每个内部向量传递给函数。

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