列表迭代器功能不正常
List iterator disfunctionality
我有一个小问题:我正在使用迭代器浏览列表,但我似乎无法仅使用它访问以前的位置
std::list<int>::iterator i;
for(i=mylist.begin();i!=mylist.end();i++)
{
if(*i<0) fprintf(fout,"%d",*(i-1));//here i want to access the (i-1)th element
}
以下是一种使用C++03:的方法
#include <iostream>
#include <list>
int main()
{
std::list<int> mylist { 11, -22, -33, 44, -55 };
std::list<int>::iterator i, j;
if (!mylist.empty())
{
for (i = mylist.begin(); ++i != mylist.end(); )
if (*i < 0)
printf("%d ",*--(j=i));
printf("n");
}
}
使用C++11,您可以将带有j
的malarky替换为std::prev(i)
,正如Columbo最初建议的那样。。。。
请注意,我更改了您的循环,以避免可能尝试访问*begin()
之前的某个想象元素。你可以看到它在这里运行。
您可以尝试std::prev
:
fprintf( fout,"%d",*std::prev(i) )
迭代器有不同的类别(请参阅迭代器的类型:输出与输入与转发与随机访问迭代器)。您的代码需要随机访问迭代器,而std::list
只提供双向迭代器。
解决此问题的一种方法是将上一个值保存在变量中,并使用该值而不是*(i-1)
。
std::list<int>::iterator i;
int temp = mylist.begin(); //temp variable to save the past i
for(i = mylist.begin(); i != mylist.end(); i++)
{
if(*i<0) fprintf(fout,"%d", temp);//here i want to access the (i-1)th element
temp = *i;
}
像这样的东西。
相关文章:
- C++中的memset函数工作不正常
- 通用线程池类工作不正常
- 在这个无限循环中,当输入 0 时终止,当输入 int 范围之外的任何内容时,程序行为不正常
- "lambda capture"正常功能?
- curl_easy_perform() 失败:SSL 对等证书或 SSH 远程密钥不正常
- 名为DLL的C++windows服务程序工作不正常
- C++-循环中的If语句工作不正常
- While循环和if/else语句工作不正常
- 定义支持/不支持功能的HAS_XXX/NO_XXX
- Qthread ::更改系统时间时睡眠不正常
- 阵列中的元素不正常地变化
- C++:最大数组值函数工作不正常
- 不允许功能模板的部分专业化背后的理由是什么?
- 套接字连接在主功能内部但不在功能内部
- 为什么在传递lambda而不是功能指针时不能推断模板参数
- 如何使用“自动”参数而不是功能过载
- 中断功能调用与正常功能
- 列表迭代器功能不正常
- Qt QOpenGLWidget glClearColor功能不正常
- Qt:鼠标移动功能不正常