如何将一个 vector<char*> 转换成 vector<string>/string?

8
我们有一个传统的方法,返回一个char指针的向量,即vector<char *>。现在,我需要处理的只是字符串(std::string)。我该如何做?
这个问题听起来很简单,但我遇到了几个网站,它们描述这些考虑可能会导致内存泄漏。
现在,我想要得到一个vector<string>或者一个没有任何内存泄漏的字符串。我该怎么做?

1
使用向量本身并没有什么泄漏的问题,只是它们在存活期间相对更耗费内存。只需使用常规的向量操作,并在完成后将其销毁即可。char* 可以轻松地使用字符串库转换为适当的 C++ 字符串。 - Rag
3个回答

22

转换非常简单:

std::vector<char*> ugly_vector = get_ugly_vector();
std::vector<std::string> nice_vector(ugly_vector.begin(), ugly_vector.end());

完成这一步后,您仍然需要确保指向ugly_vector中指针所指的对象被正确销毁。如何做取决于您正在使用的遗留代码。


向量构造函数是否在操作中调用了字符串构造函数? - zw324
你比我先做到了。那是一种我喜欢的用于转换argv[]的技巧。 - Martin York
4
非常方便:std::vector<std::string> args(argv, argv + argc); - James McNellis

2
使用 std::copy
using namespace std;
vector<char*> v_input;
...
// fill v_input
...
vector<string> v_output;

v_output.resize(v_input.size());
copy(v_input.begin(), v_input.end(), v_output.begin());

-1

好的,根据性能要求,您可以根据需要构建一个std::string。像这样:

for(std::vector<char*>::const_iterator it = v.begin(); it != v.end(); ++it) {
    std::string s = *it;

    // do something with s
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接