C++ 将值解析为 vector 的更好方法

标签 c++ parsing stl stream

我正在解析来自“C-only”接口(interface)的文本数组,其中每个字符串可能具有任意数量的值,这些值可以单独由“istream::operator >>( )”。

例如,其中一个解析器用于自定义 IPv4 类:

std::istream &  operator >>( std::istream& stream, IPv4 &var )

实现非常明显。

现在假设输入如下:

const char *string_array[] =
{
    "192.168.0.1, 192.168.0.32,    192.168.0.40",
    "169.254.3.18, 169.254.3.19, 169.254.3.20, 169.254.3.21",
    "10.0.92.100",
    "10.0.0.101,    10.0.0.102,    10.0.0.103   ,  10.0.0.104 , 10.0.0.110  ",
};

我想找到一种优雅的方式将所有已解析的值放入一个数组中,以便我可以将它发送给“C-only”函数。

天真的方法是首先用 stringstream 连接所有字符串 (const char *),然后用我的 operator 遍历这个流 >>

        std::stringstream   ss;
        IPv4 ip;
        std::vector< IPv4 > ip_vector;

         for ( int c = 0; c < count; ++c )
                        ss << string_array[ c ] << ", ";

         while ( ss.good( ) )
         {
                        ss >> ip;
                    ip_vector.push_back( ip );
         }

这对我来说似乎不是那么明智,但我不知道如何让它变得更聪明。

另请注意:Boost 不是此解决方案的选项。

最佳答案

您可以使用内置的 STL 功能,而无需编写自己的循环。

copy(string_array, string_array + count,
     ostream_iterator<const char *>(ss, ", "));
copy(istream_iterator<IPv4>(ss), istream_iterator<IPv4>(),
     back_inserter(ip_vector));

关于C++ 将值解析为 vector 的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11477117/

相关文章:

c++ - 排序可视化——如何解决循环依赖?

c++ - 管理内存泄漏 C++ 的问题

c# - 将工作日缩写字符串(包括范围)转换为 List<DayOfWeek>

std::vector<obj*> 的 C++ 初始值设定项列表作为构造函数参数

c++ - 在 STL 列表中输出一个元组

c++ - 一般情况下 typedef 可以用于 vector 吗?

c++ - 尝试在 QT 中编译项目时出现 Jom 错误

parsing - Grails覆盖区域设置数字格式

JavaCC:请给我 "real"示例的链接

c++ - 类型衰减 STL 迭代器