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()};
});