简单链表C++的循环

简单链表C++的循环,c++,C++,我正在尝试为这部分做一个循环: insert_front(&list,name[0]); insert_front(&list,name[1]); insert_front(&list,name[2]); 但是,我不知道哪一个应该用作限制器,哪一个应该停止循环,以及它将如何更改名称[]周长 以下是全部代码: #include "list.h" #include "string" using namespace s

我正在尝试为这部分做一个循环:

    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;

}

我认为你正在努力做到:

for(int i=0; i<name.size(); i++)
{
      insert_front(&list,name[i]);
}

这将在列表中存储名称的每个字符。

这并不是您所说的全部代码。您的列表存储哪些元素?每个节点看起来只有一个字符。因此,您似乎正在尝试创建一个字符列表,以按相反顺序表示此人的姓名

在这种情况下:

for( size_t i = 0; i < name.length(); i++ ) {
    insert_front(&list,name[i]);
}

迭代器版本C++03:

for (std::string::iterator iter = name.begin(); iter != name.end(); ++iter)
    insert_front(&list, *iter);
for (size_t i = 0; i < name.size(); ++i)
    insert_front(&list, name[i]);
Foreach版本C++11:

for ( char c : name)
    insert_front(&list, c);
索引版本C++03:

for (std::string::iterator iter = name.begin(); iter != name.end(); ++iter)
    insert_front(&list, *iter);
for (size_t i = 0; i < name.size(); ++i)
    insert_front(&list, name[i]);
对于C++11foreach版本,我不太确定


如果手动编码的列表中有迭代器,那么使用std::copy或std::transform也可能是一种合理的方法。

标准模板库(字符串是其中的一部分)提供了一些非常有效和安全的迭代器,用于处理可能要循环的项

for(string::iterator iter = name.begin(); iter < name.end(); iter++) {
    insert_front(&list, *iter);
}
完成了。根本没有循环或每次调用的手册。您甚至可以使用name.begin+1跳过第一个字符。请参阅

正如评论中指出的,要实现插入式前倒车效果,应:

std::list list (name.rbegin(), name.rend());
string::rebgin和string::rend按相反顺序迭代。更简单地说,这是在使用string::begin和string::end分别引入反转之后出现的


显然,您正在使用一个不同的列表,需要一些循环才能继续使用它。但是,您可能决定将字符串保留为字符串,并将相关迭代器传递给打印函数,而完全避免使用列表。这可能会使代码变得足够通用,而不必关心它是来自字符串还是列表。

顺便说一句,当您包含由您的语言提供的标题时,请使用,而不是:ie include。这是:delete_list&list;打印列表;看起来基本上肯定是个错误。彻底!另外,C++03 BOOST_FOREACH char C,name insert_front&list,C;是的。忘记了那个,因为我很少使用它。要复制查询器的代码,您需要在构造函数调用中使用rbegin和rend。假设insert\u front是一个准确的名称。不确定为什么有人会-1这个,它有很多好的建议…特别是最后一段。修复了rbegin/rend内联。我建议使用size\u t来避免关于比较有符号和无符号的警告。