C++ 如何转换向量<;字符*>;到向量<;字符串>/一串

C++ 如何转换向量<;字符*>;到向量<;字符串>/一串,c++,stl,vector,C++,Stl,Vector,我们有一个传统方法,它返回字符指针的向量,即向量。 现在,我只需要处理字符串(std::string)。我该怎么做 这个问题听起来可能很简单,但我遇到了几个网站,它们描述了这些考虑因素可能导致内存泄漏 现在,我想得到一个向量,甚至是一个没有内存泄漏的字符串。我如何才能做到这一点?转换非常简单: std::vector<char*> ugly_vector = get_ugly_vector(); std::vector<std::string> nice_vector(u

我们有一个传统方法,它返回字符指针的
向量
,即
向量
。 现在,我只需要处理字符串(
std::string
)。我该怎么做

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


现在,我想得到一个
向量
,甚至是一个没有内存泄漏的字符串。我如何才能做到这一点?

转换非常简单:

std::vector<char*> ugly_vector = get_ugly_vector();
std::vector<std::string> nice_vector(ugly_vector.begin(), ugly_vector.end());
std::vector丑恶向量=获取丑恶向量();
std::vector nice_vector(丑恶的_vector.begin(),丑恶的_vector.end());

但是,一旦完成此操作,您仍然需要确保
丑陋_vector
中的指针指向的对象已正确销毁。如何做到这一点取决于所使用的旧代码。

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

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

    // do something with s
}
for(std::vector::const_迭代器it=v.begin();it!=v.end();++it){
std::string s=*it;
//用手指做点什么
}

使用
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;
向量v_输入;
...
//填充v_输入
...
矢量v_输出;
v_output.resize(v_input.size());
复制(v_input.begin()、v_input.end()、v_output.begin());

使用向量本身并没有什么漏洞,只是它们在活着的时候内存相对比较昂贵。只需使用常规向量运算,完成后将其销毁。CHAR*可以很容易地使用字符串库转换成一个适当的C++字符串。向量构造函数调用操作后的字符串构造函数吗?这是我喜欢的转换argv[]
std::vector args(argv,argv+argc);//非常方便