将未知长度的char **(c)转换为vector <string>(c ++)</string>

时间:2013-03-29 18:50:29

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

如何将C char **转换为C ++向量?是否有一些内置功能可以用来做到这一点,还是通过一系列迭代步骤来实现它更好?

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

4 个答案:

答案 0 :(得分:17)

您可以简单地使用带有两个迭代器的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

答案 1 :(得分:8)

char** c;
vector<string> v(c, c + 10);

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

答案 2 :(得分:1)

你可以使用带有两个迭代器的constructor of std::vector,a.k.a。 范围构造函数

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

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

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

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

答案 3 :(得分:0)

这个单行程序对捕获命令行参数非常有用......

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