gpt4 book ai didi

c++ - 如果我在下面的代码中使用列表而不是 vector ,为什么在我尝试在迭代器之间执行减法的那一行编译失败?

转载 作者:行者123 更新时间:2023-11-30 05:00:50 24 4
gpt4 key购买 nike

下面的代码工作正常:

#include<vector>
#include<algorithm>
#include<iostream>
using namespace std;

int main()
{
vector<int> v1;
vector<int>::iterator it, low, up;

for (int i=1; i<=10; i++)
v1.push_back(i);
cout << "elements are- \n";
for(it=v1.begin(); it!=v1.end(); it++)
cout << *it << " ";
sort(v1.begin(), v1.end());

low = lower_bound(v1.begin(), v1.end(), 3);
up = upper_bound(v1.begin(), v1.end(), 6);

cout << "\npos of low- " << (low-v1.begin()) << "\n";
cout << "pos of up- " << (up-v1.begin()) << endl;

return 0;
}

但是如果容器的类型从vector改为list,编译就会失败。它显示以下错误:

In function 'int main()': 20:35: error: no match for 'operator-'
(operand types are 'std::list<int>::iterator {aka
std::_List_iterator<int>}' and 'std::list<int>::iterator {aka
std::_List_iterator<int>}')

最佳答案

std::lower_bound 工作得很好。 (尽管它没有达到应有的效率。)您试图从另一个迭代器中减去一个迭代器,因为 std::list::iterator 不是随机访问迭代器并且不支持减法。

为了将来引用,如果您发布了一段代码和带有行号的错误,您应该以某种方式指出代码中的哪一行。 SO 在其代码片段中不包含行号,即使包含,我们也无法保证它们实际上与您编译的代码一致(即您没有在某处截断某些行)。

关于c++ - 如果我在下面的代码中使用列表而不是 vector ,为什么在我尝试在迭代器之间执行减法的那一行编译失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50550119/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com