File tree Expand file tree Collapse file tree 1 file changed +16
-0
lines changed
Expand file tree Collapse file tree 1 file changed +16
-0
lines changed Original file line number Diff line number Diff line change @@ -686,3 +686,19 @@ int test_item_28() {
686686```
687687如果要在一个reverse_iterator ri指定的位置上插入新元素,则只需在ri.base()位置处插入元素即可。对于插入操作而言,ri和ri.base()是等价的,ri.base()是真正与ri对应的iterator。
688688如果要在一个reverse_iterator ri指定的位置上删除一个元素,则需要在ri.base()前面的位置上执行删除操作。对于删除操作而言,ri和ri.base()是不等价的,ri.base()不是与ri对应的iterator。
689+
690+ ## 第 29 条:对于逐个字符的输入请考虑使用 istreambuf_iterator
691+ ``` c++
692+ int test_item_29 () {
693+ // 把一个文本文件的内容拷贝到一个string对象中
694+ std::ifstream inputFile("interestingData.txt");
695+ inputFile.unsetf(std::ios::skipws); // 禁止忽略inputFile中的空格
696+ std::string fileData((std::istream_iterator<char>(inputFile)), std::istream_iterator<char>()); // 速度慢
697+
698+ std::string fileData2((std::istreambuf_iterator<char>(inputFile)), std::istreambuf_iterator<char>()); // 速度快
699+
700+ return 0;
701+ }
702+ ```
703+ std::istream_iterator<char >对象使用operator>>从输入流中读取单个字符,而std::istreambuf_iterator<char >则直接从流的缓冲区中读取下一个字符。std::istreambuf_iterator不会跳过任何字符,它只是简单地取回流缓冲区中的下一个字符,而不管它们是什么字符,因此用不着清除输入流的skipws标志。
704+
You can’t perform that action at this time.
0 commit comments