istringstream 和读取浮点数

istringstream and reading float

this question也提到了这个问题。

我正在逐行读取文件 std::getline

     std::getline(points_file, thisline);
     std::istringstream iss(thisline);
     int cnt = 0;
     Coordinates.resize(NumberOfNodes, std::vector<float>(3));
     for(std::istream_iterator<float> iit( iss );
        iit!=std::istream_iterator<float>( );
        iit++ )
     {
        assert( cnt < 3 );
        *(iit) >> Coordinates[i][cnt];
        cnt++;
     }

错误信息: error: invalid operands to binary expression ('const float' and 'std::__1::__vector_base<float, std::__1::allocator<float> >::value_type' (aka 'float')) *(iit) >> Coordinates[i][cnt];

如果我尝试改为读取整数,则效果很好。我正在使用 CLANGGCC 似乎没有出现此问题,但是,我无权访问此 atm 以进行实际测试。另外,为什么 CLANG 会失败,如何解决?

使用 push_back 或常规赋值(不是 >>)将值存储在您的容器中:

for(std::istream_iterator<float> iit(iss), iitEnd; iit != iitEnd; iit++)
{
   assert( cnt < 3 );

   // This means you SHOULDN'T pre-resize()
   Coordinates[i].push_back(*iit);

   //or

   // This means you SHOULD pre-resize()
   Coordinates[i][cnt] = *iit;
   cnt++;
}

此外,考虑使用类似的东西:

using vec3 = std::array<float, 3>;

而不是 std::vector<float>(3) 以提高性能和安全性。