我根据以下代码片段提出三个问题
我有一个字符串列表。它恰好是一个 vector ,但可能是任何来源
vector<string> v1_names = boost::assign::list_of("Antigua and Barbuda")( "Brasil")( "Papua New Guinea")( "Togo");
下面是存储每个名字的长度
vector<int> name_len;
下面是我要存放字符串的地方
std::vector<char> v2_names;
估计从 v1_names 复制名称所需的内存
v2_names.reserve( v1_names.size()*20 + 4 );
问题:这是估算存储量的最佳方法吗?我将最大长度固定为 20 就可以了,然后为 null treminator 添加空间
现在复制名称
for( std::vector<std::string>::size_type i = 0; i < v1_names.size(); ++i)
{
std::string val( v1_names[i] );
name_len.push_back(val.length());
for(std::string::iterator it = val.begin(); it != val.end(); ++it)
{
v2_names.push_back( *it );
}
v2_names.push_back('\0');
}
问题:这是将元素从 v1_name 复制到 v2_names 的最有效方法吗?
主要问题:如何遍历 v2_names 并打印 v2_names 中包含的国家名称
最佳答案
使用简单的连接,利润!
#include <boost/algorithm/string/join.hpp>
#include <vector>
#include <iostream>
int main(int, char **)
{
vector<string> v1_names = boost::assign::list_of("Antigua and Barbuda")( "Brasil")( "Papua New Guinea")( "Togo");
std::string joined = boost::algorithm::join(v1_names, "\0");
}
关于c++ - 如何遍历 std::vector<char> 并找到以 null 结尾的 c 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7446172/