【问题标题】:Convert char** (c) of unknown length to vector<string> (c++) [duplicate]将未知长度的char**(c)转换为vector<string>(c++)[重复]
【发布时间】:2013-03-29 18:50:29
【问题描述】:

如何将 C char** 转换为 C++ 向量?是否有一些内置功能可以用来执行此操作,或者通过一系列迭代步骤来完成它更好?

编辑:由于各种原因,C 数组中的元素数量是未知的。有可能我可以将它作为另一个参数传递,但这是绝对必要的吗?

【问题讨论】:

标签: c++ arrays string vector c-strings


【解决方案1】:

您可以简单地使用带有两个迭代器的std::vector 的构造函数:

const char* arr[] = {"Hello", "Friend", "Monkey", "Face"};
std::vector<std::string> v(std::begin(arr), std::end(arr));

或者如果你真的有const char**:

const char** p = arr;
std::vector<std::string> v(p, p + 4);

由于数组到指针的转换,这也可以直接使用arr 而不是p

【讨论】:

  • @LihO 哎呀。谢谢!
【解决方案2】:
char** c;
vector<string> v(c, c + 10);

将从给定范围的元素构造元素。 10 是这里的元素数

【讨论】:

  • 这里的假设以及所有答案都是元素的数量是已知的......
  • @MirroredFate,您应该始终知道 c 样式数组中的元素数量(或指向连续元素的指针)。在其他情况下,你什么也做不了,(除非你知道它是新的就删除,如果它是 malloc 的则释放)
【解决方案3】:

您可以使用带有两个迭代器的constructor of std::vector,也就是范围构造函数

char* strings[] = {"aaa", "bbb", "ccc", "ddd"};
std::vector<std::string> v(strings, strings + 4);

4 是数组的大小。在这个具体的例子中,strings 数组的大小的计算也可以使用sizeof operator

int len = sizeof(strings)/sizeof(char*);
std::vector<std::string> v2(strings, strings + len);

这对于纯char** 是不可能的,因为数组的大小不能以任何方式直接从指针中检索(也值得阅读有关array decaying 的内容)。

【讨论】:

    【解决方案4】:

    这个单行代码对于捕获命令行参数很有用...

    int
    main(int argc, char ** argv)
    {
      std::vector<std::string> arguments(argv, argv + argc);
    }
    

    【讨论】:

      猜你喜欢
      • 2014-11-19
      • 1970-01-01
      • 1970-01-01
      • 2014-05-16
      • 1970-01-01
      • 2017-03-18
      • 1970-01-01
      • 2012-03-02
      相关资源
      最近更新 更多