下面是简单的代码:
#include <iostream>
#include <list>
#include <iterator>
using namespace std;
int main()
{
list<int> ints = { 3, 6, 1, 5, 8 };
int index;
index = 2;
std::list<int>::iterator it = ints.begin() + index;
cout << "Element at index " << index << " is " << *it << '\n';
return 0;
}在编撰上,它说:
错误:不匹配“operator+”(操作数类型为‘std::__cxx11::list::iterator’{aka‘std::_List_iterator’}和‘int’) std::list::iterator it = ints.begin() + index; 商业、金融、金融等领域的商业、金融等方面的自愿性、自愿
我明白编译器想说什么,但我不知道如何解决这个问题。如何将int转换为iterator并在该索引处获取元素?我确实寻找过类似的问题,但大多数问题都是以相反的方向进行转换的,这可以使用std::distance来完成,而其余的问题则是针对不同的容器。
谢谢你的帮忙!
发布于 2020-04-28 16:42:38
使用std::next。
如果您认为distance是两个迭代器之间的运算符-,那么next、prev和advance分别是迭代器和整数之间的+、-和+=。
这些函数意味着以相同的方式对待所有迭代器,尽管不同迭代器的操作复杂度不同。对于使用“前向迭代器”的std::list,这些都是线性的。对于使用“随机访问迭代器”的std::vector来说,这些都是常量。
发布于 2020-04-28 16:45:45
将整数转换为std::list的迭代器
整数和迭代器是非常独立的概念,因此不清楚这种转换有什么意义。如何将椰子转化为传递性?
..。在那个索引上得到元素?
现在,这更有意义了。然而,List元素没有索引。但据推测,索引i从一开始就意味着ith (基于零的)连续元素。
标准库有一个函数:std::next。这样做(使用非随机访问迭代器)是在一个循环中增加给定次数的迭代器。直观地说,这类运算的渐近复杂性是线性的。
https://stackoverflow.com/questions/61485314
复制相似问题