C++ - 如何将字符*转换为标准::列表<char>

C++ - How to convert char* to std::list<char>

本文关键字:gt 列表 char lt 标准 字符 转换 C++      更新时间:2023-10-16

这是的初学者类型的问题

我只是想知道是否有一种方法可以将以null结尾的char*转换为std::list。

谢谢

char* data = ...
std::list<char> clist = convert_chars2list(data);
...
convert_chars2list(char* somedata)
{
    //convert
}

这可能是最简单的方法:

#include <list>
#include <string>
int main() 
{ 
    char const* data = "Hello world";
    std::list<char> l(data, data + strlen(data));
}

它利用了std::string具有与STL容器兼容的接口这一事实。

std::list<char> convert_chars2list(char *somedata)
{
    std::list<char> l;
    while(*somedata != 0)
        l.push_back(*somedata++);
    // If you want to add a terminating NULL character
    // in your list, uncomment the following statement:
    // l.push_back(0);
    return l;
}
std::list<char> convert_chars2list(char* somedata)
{
  std::list<char> res;
  while (*somedata)
     res.push_back(*somedata++);
  return res;
}

如果你的char*是一个C风格的字符串,那么你可以这样做(这意味着它以结束)

#include <list>
int main()
{
    char hello[] = "Hello World!";
    std::list<char> helloList;
    for(int index = 0; hello[index] != 0; ++index)
    {
        helloList.push_back( hello[index] );
    }    
}

让C++标准库负责指针处理和迭代器遍历。

std::string str = "Hello world";

尽管您可以使用std::string本身的[]运算符访问每个字符,但如果您想要一个字符列表

std::list<char> chars(str.begin(), str.end());

使用std::list来包含字符真的很奇怪,如果你真的想使用stl来包含字符,你可以使用std::string,这将允许你执行:

char*           data = ....;
std::string     string(data);