C++ 转换向量<;向量<;char>&燃气轮机;变成一个向量<;字符串>;

C++ 转换向量<;向量<;char>&燃气轮机;变成一个向量<;字符串>;,c++,string,c++11,vector,stl,C++,String,C++11,Vector,Stl,我有一本书 std::vector并希望用其内容填充std::vector 我只是想不起如何访问的内部向量并将字符放入字符串向量中 也许我错了,但我认为std::vector类似于字符串。 所以,这应该不难做到,我只是被困在我的脑海中的某个地方 我看到了: 但这并没有让我走多远 感谢您的帮助。简单的解决方案应该足够有效: std::vector<std::string> chars_to_string(std::vector<std::vector<char>>

我有一本书

std::vector
并希望用其内容填充
std::vector

我只是想不起如何访问的内部向量并将字符放入字符串向量中

也许我错了,但我认为std::vector类似于字符串。 所以,这应该不难做到,我只是被困在我的脑海中的某个地方

我看到了: 但这并没有让我走多远


感谢您的帮助。

简单的解决方案应该足够有效:

std::vector<std::string>
chars_to_string(std::vector<std::vector<char>> const & in)
{
    std::vector<std::string> out;
    out.reserve(in.size());
    for (auto const & v : in)
        out.emplace_back(v.begin(), v.end());
    return out;
}
std::vector 字符到字符串(std::vector const&in) { std::向量输出; out.reserve(in.size()); 用于(自动常量和v:in) 放回(v.begin(),v.end()); 返回; }
我想你可以:

std::vector<char> v_char;
std::string my_string(v_char.begin(), v_char.end());
一旦你有了
std::string
,填充一个向量就很容易了。

这应该是可行的

std::vector<string> vec;
for(std::vector<std::vector<char>>::iterator itr = source.begin(); 
    itr != source.end(); ++itr) {
    vec.push_back(std::string(itr.begin(),itr.end()));
);
std::向量向量向量机;
for(std::vector::iterator itr=source.begin();
itr!=source.end();++itr){
向量推回(std::string(itr.begin(),itr.end());
);

这是一个
算法
版本

std::vector<std::vector<char>> a;
std::vector<std::string> b;

std::transform(a.begin(), a.end(), std::back_inserter(b),
[](std::vector<char> const& v) -> std::string {
  return {v.begin(), v.end()};
});
std::向量a;
std::载体b;
std::transform(a.begin()、a.end()、std::back_插入器(b),
[](std::vector const&v)->std::string{
返回{v.begin(),v.end()};
});

对于这个简单的解决方案,我甚至不需要考虑
调整大小
;摊销常量回插入等等。因为您使用的是C++11,我建议:
For(auto const&e:source)
它的可读性要大得多。还要注意重复计算
source.end()
在循环的每次迭代中都不是特别“好”。第一种方法肯定是可行的;它也非常有效,因为
std::string
可以计算出预期的长度,以O(1)为单位,作为两个迭代器之间的差值,从而一次性地预先保留内存。
std::vector<std::vector<char>> a;
std::vector<std::string> b;

std::transform(a.begin(), a.end(), std::back_inserter(b),
[](std::vector<char> const& v) -> std::string {
  return {v.begin(), v.end()};
});