如何将向量<字符*>转换为向量<string>/字符串

How to convert a vector<char*> to a vector<string>/string

本文关键字:gt lt 向量 string 字符串 转换 字符      更新时间:2023-10-16

我们有一个遗留方法,它返回char指针的vector,即vector<char *>。现在,我只需要处理字符串(std::string)。我该怎么做呢?

这个问题可能听起来很简单,但是我遇到了一些网站,它们描述了这些考虑可能导致内存泄漏。

现在,我要么想要得到一个vector<string>,甚至一个没有任何内存泄漏的字符串。我该怎么做呢?

转换非常简单:

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

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

使用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());

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

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