问题描述
我最近了解了std :: string_view以及它比分配字符串快得多的原因,因此我尝试在可能的地方使用它代替std :: string。
有没有一种优化循环的方法,可以逐行解析文件以使用std :: string_view?
这是我正在处理的代码。
std::string line;
// loop until we find the cabbage tag
while (std::getline(csd,line))
{
//DO STUFF
if (line.find("</STOP>") != std::string::npos)
break;
}
解决方法
您要寻找的是unsigned int hello;
unsigned int world;
void fun ( void )
{
hello++;
world++;
}
-Ttext=0x1000 -Tdata=0x20000300
Disassembly of section .text:
00001000 <fun>:
1000: 20000637 lui x12,0x20000
1004: 200006b7 lui x13,0x20000
1008: 30462703 lw x14,772(x12) # 20000304 <hello>
100c: 3006a783 lw x15,768(x13) # 20000300 <__DATA_BEGIN__>
1010: 0705 addi x14,x14,1
1012: 0785 addi x15,x15,1
1014: 30e62223 sw x14,772(x12)
1018: 30f6a023 sw x15,768(x13)
101c: 8082 ret
Disassembly of section .sbss:
20000300 <world>:
20000300: 0000 unimp
...
20000304 <hello>:
20000304: 0000 unimp
...
fun:
lui a2,%hi(hello)
lui a3,%hi(world)
lw a4,%lo(hello)(a2)
lw a5,%lo(world)(a3)
addi a4,a4,1
addi a5,a5,1
sw a4,%lo(hello)(a2)
sw a5,%lo(world)(a3)
ret
,它使您可以读取文件的数据而无需复制它们。在C ++中从流中读取将始终复制数据。然后,您当然可以使用mmap
指向std::string_view
所显示的数据,并执行您喜欢的所有操作。
不。 string_view
是:
- 有关某些存储的恒定视图,因此您无法读入
string_view
- 不拥有该存储,而是“引用”其他存储,因此
getline
无处放置读取的信息。
但是,一旦将数据读取到string
中,就可以制作一个string_view
并将其传递给例程进行解析(在这种情况下,避免传递副本)。