for简单链表的循环c++
for loop for simple linked list c++
我正在尝试为这个部分做一个循环:
insert_front(&list,name[0]);
insert_front(&list,name[1]);
insert_front(&list,name[2]);
但是,我不知道哪个应该用作限制器,哪个应该停止循环,以及它将如何更改名称[]周长。
这是整个代码:
#include "list.h"
#include "string"
using namespace std;
int main(){
cout<<"What is your name n";
string name;
getline(cin,name);
Node *list;
list = new_list();
insert_front(&list,name[0]);
insert_front(&list,name[1]);
insert_front(&list,name[2]);
}
print_list(list);
delete_list(&list);
print_list(list);
return 0;
}
迭代程序版本(C++03):
for (std::string::iterator iter = name.begin(); iter != name.end(); ++iter)
insert_front(&list, *iter);
Foreach版本(C++11):
for ( char c : name)
insert_front(&list, c);
索引版本(C++03):
for (size_t i = 0; i < name.size(); ++i)
insert_front(&list, name[i]);
Foreach版本(带有Boost的C++03):
std::for_each(name.begin(), name.end(), boost::bind(insert_front, &list, _1));
我对C++11 foreach版本不太确定。
如果手工编码的列表有迭代器,那么可能还有一种合理的方法可以使用std::copy或std::transform。
这并不是你所说的"全部代码"。您的列表存储哪些元素?看起来每个节点只有一个字符。因此,你似乎是在试图制作一个字符列表,以相反的顺序表示人名。
情况就是这样:
for( size_t i = 0; i < name.length(); i++ ) {
insert_front(&list,name[i]);
}
字符串是标准模板库的一部分,它提供了一些非常高效和安全的迭代器来处理您可能想要循环的项。
for(string::iterator iter = name.begin(); iter < name.end(); iter++) {
insert_front(&list, *iter);
}
string::begin显示了相同的示例。
string::begin()返回一个对象,当用运算符*取消引用时,该对象会给出其at.operator++()递增到下一个位置的值。string::end()在字符串结束后给出另一个对象,以便运算符++()之后的运算符==()停止循环。
现在,这里的重要部分是你没有使用索引。许多STL容器允许您使用迭代器复制值。您甚至可以跳过for循环来使用stl列表,并执行以下操作:
std::list list (name.begin(), name.end());
完成。根本没有手动的for循环或for_each()调用。您甚至可以使用name.begin()+1跳过第一个字符。请参阅列表构造函数。
正如评论中所指出的,要实现insert_front()的反转效果,应该是:
std::list list (name.rbegin(), name.rend());
string::rebgin()和string::rend()按相反顺序迭代。更简单地说,这是在使用字符串::begin()和字符串::end()分别引入反转之后出现的。
显然,您使用的是一个不同的列表,需要一些循环才能继续使用它。但是,您可能只是决定将字符串保留为字符串,并将相关迭代器传递给print函数,从而避免使用列表。这可能允许您使代码足够通用,而不必关心它是来自字符串还是列表。
我想你正在尝试做:
for(int i=0; i<name.size(); i++)
{
insert_front(&list,name[i]);
}
这将在列表中存储名称的每个字符。
- 如何循环打印顶点结构
- 如何在C++中从两个单独的for循环中添加两个数组
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 正在尝试了解输入验证循环
- std::map<struct,struct>::find 找不到匹配项,但是如果我循环通过 begin() 到 end(),我在那里看到匹配项
- 循环后如何继续阅读
- Ardunio UNO解决了多个重叠的定时器循环
- Eigen如何在容器循环中干净地附加矩阵
- 在某些循环内使用vector.push_back时出现分段错误
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 为什么我的for循环不能正确获取argv
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- while循环中while循环的时间复杂度是多少
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- 为什么在这个代码结束循环中没有得到结束
- 在基于范围的for循环中使用结构化绑定声明
- 用于C++中带有数组和指针的循环
- 循环中的随机函数
- 是什么阻止DOMTimerCoordinator::NextID进入无休止的循环
- 在循环C++中指定字符串之后,不会打印该字符串