c++ - C++ 赋值 std::list::iterator 在 main 中工作,但在方法中却没有
问题描述
你好 :) 我想知道基于 std::list 制作循环列表,我正在寻找 STL 循环列表,但我没有找到。我有想法创建增加 std::list::iterator 的函数,当迭代器 == list.end 时,它分配迭代器 = list.begin()。不幸的是没有匹配分配运算符。我决定使用堆内存。并在旧的指向列表末尾时分配新的迭代器。它在主要功能中起作用。但作为方法它不会。我完全坚持这一点,知道我应该怎么想吗?
void increment_iterator(const std::list<int> & list, std::list<int>::iterator *iterator, int &val)
{
for(int i=0;i<val;i++)
{
iterator->operator++();
if(*iterator == list.end())
{
// *iterator = list.begin(); //here is problem
}
}
}
void increment_iterator(const std::list<int> & list, std::shared_ptr<std::list<int>::iterator> it, int &val)
{
for(int i=0;i<val;i++)
{
it->operator++();
if(*it==list.end())
{
// *it = list.begin(); //here is problem
}
}
}
int main() {
std::list<int> intlist{1,2,3,4,5,6,7};
std::list<int>::iterator *iterator = new std::list<int>::iterator;
*iterator=intlist.begin();
iterator++;
*iterator=intlist.end();
return 0;
}
这是错误输出:
Scanning dependencies of target CodeWars
[ 33%] Building CXX object CMakeFiles/CodeWars.dir/main.cpp.o
/home/tomek/Documents/C++/zadania wlasne 1/CodeWars/main.cpp: In function ‘void increment_iterator(const std::__cxx11::list<int>&, std::__cxx11::list<int>::iterator*, int&)’:
/home/tomek/Documents/C++/zadania wlasne 1/CodeWars/main.cpp:40:36: error: no match for ‘operator=’ (operand types are ‘std::__cxx11::list<int>::iterator {aka std::_List_iterator<int>}’ and ‘std::__cxx11::list<int>::const_iterator {aka std::_List_const_iterator<int>}’)
*iterator = list.begin();
^
In file included from /usr/include/c++/7/list:63:0,
from /home/tomek/Documents/C++/zadania wlasne 1/CodeWars/CodeWarsCodes.h:13,
from /home/tomek/Documents/C++/zadania wlasne 1/CodeWars/main.cpp:8:
/usr/include/c++/7/bits/stl_list.h:128:12: note: candidate: constexpr std::_List_iterator<int>& std::_List_iterator<int>::operator=(const std::_List_iterator<int>&)
struct _List_iterator
^~~~~~~~~~~~~~
/usr/include/c++/7/bits/stl_list.h:128:12: note: no known conversion for argument 1 from ‘std::__cxx11::list<int>::const_iterator {aka std::_List_const_iterator<int>}’ to ‘const std::_List_iterator<int>&’
/usr/include/c++/7/bits/stl_list.h:128:12: note: candidate: constexpr std::_List_iterator<int>& std::_List_iterator<int>::operator=(std::_List_iterator<int>&&)
/usr/include/c++/7/bits/stl_list.h:128:12: note: no known conversion for argument 1 from ‘std::__cxx11::list<int>::const_iterator {aka std::_List_const_iterator<int>}’ to ‘std::_List_iterator<int>&&’
这是“正确”的解决方案
void increment_iterator( std::list<int> & list, std::list<int>::iterator *iterator, int val)
{
for(int i=0;i<val;i++)
{
iterator->operator++();
if(*iterator == list.end())
{
*iterator = list.begin();
}
}
}
感谢帮助 :)
解决方案
有了const std::list<int> & list
一个const
列表,因此list.begin()
调用const
返回 this 的重载std::list::const_iterator
就不能转换为std::list::iterator
.
您需要从列表引用中删除 const 或使用const_iterator
而不是iterator
.
推荐阅读
- ios - 非致命报告未记录
- r - 针织时控制 svg 中的表面 id
- amazon-web-services - 部署包含全球资源的多区域 CloudFormation 堆栈的正确方法是什么?
- html - 如何将一个 div 放在另一个 div 的底部。这样当父 div 滚动时,子 div 不会移动
- excel - 如何检查值是否是来自其他工作表列的引用?
- java - 没有从java中的当前目录取回以前的路径名2文件夹
- powershell - Powershell 没有捕获 perl 的标准输出
- c++ - 错误:“numeric_limits”不是类模板
- javascript - 如何设置 setTimeout 和 clearTimeout 以在同一个按钮上运行
- c# - ASP.net MVC 5 Multi-Language:语言资源有时不能一致地工作