gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:03:43 24 4
gpt4 key购买 nike

我正在解析来自“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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com