- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我如何使用 STL 算法来做到这一点?
std::ifstream file(filename);
std::vector<unsigned char> buf;
for(auto file_it = std::istreambuf_iterator<char>(file); file_it != std::istreambuf_iterator<char>() && buf.size() < 2048; ++file_it)
buf.push_back(*file_it);
备注buf.size() < 2048
.
例如如果我执行以下操作并且文件小于 2048 字节,会发生什么情况?
std::copy_n(std::istreambuf_iterator<char>(file), 2048, std::back_inserter(buf));
最佳答案
如文档所述,std::copy_n()
将完全复制n
项目。它将继续读取迭代器引用的序列的末尾。我不确定标准对 istreambuf_iterator<>
说了什么, 尽管。这可能是未定义的行为,但流很可能会产生大量 eof()
的拷贝过了尽头。当少于 2048
时,这可能会导致大量垃圾。可用字节数。
无论如何,如果您想可靠地复制到 n
项,您需要编写自己的函数:
template<typename I1, typename I2, typename size_type>
I copy_upto_n ( I1 begin, I1 end, size_type n, I2 out )
{
for (size_type i=0; (i < n) && (begin != end); ++i)
{
*out++ = *begin++;
}
return out;
}
有些人可能会使用 std::iterator_traits<>
而不是额外的模板参数来强制使用与迭代器相同的距离类型。
关于c++ - copy_n 还是直到eof?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8379469/
copy_n() 算法可以从源容器复制指定个数的元素到目的容器中。第一个参数是指向第一个源元素的输入迭代器,第二个参数是需要复制的元素的个数,第三个参数是指向目的容器的第一个位置的迭代器。这个算法会返
我如何使用 STL 算法来做到这一点? std::ifstream file(filename); std::vector buf; for(auto file_it = std::istreambu
我正在查看 N3485 25.3.1 [alg.copy] 中的 C++ 标准,它定义了 4 种算法: 复制 copy_backward copy_if copy_n 在 copy 的描述中,有这个注
下面的区别?哪一个有未定义的行为?两个? std::copy_n(asdf.begin(), asdf.size(), asdf.begin()); std::copy(asdf.begin(), a
我有一个结构和结构 vector : struct S { int Efficiency; int Number; }; std::vector Empl; 我尝试使用 copy_n
为什么在C++11中提供了_n版本的copy、fill和generate,为什么只有这些算法? 最佳答案 一般来说,STL 只提供原语,从中可以定义适当改编的变体。 SGI 文档给出了提供您提到的异常
如果我为 vector 保留一些空间,然后使用 std::copy_n() 在其中复制一些值,我会正确复制并访问这些值,但是 vector 的大小仍然为零。这是预期的行为吗?我是否应该改为调整 vec
根据 cppreference.com , reinterpret_cast: Converts between types by reinterpreting the underlying bit
我试图将输入行复制到多个 vector 中: #include #include #include #include #include #include int main(){ std
这么简单的问题。 template OutputIt copy_n(InputIt first, Size count, OutputIt result); 为什么 std::copy_n 为要复制的
我希望下面的 buf_iter 指向字符 n 字符在它开始的点之后。相反,它指向最后一个读取的字符。为什么是这样?即,如果我在 copy_n 之前和之后执行 in_stream.tellg(),它们的
下面的代码片段从 std::cin 中读取三个整数;它将两个写入 numbers 并丢弃第三个: std::vector numbers(2); copy_n(std::istream_iterato
我已通读 copy_n 文档 https://en.cppreference.com/w/cpp/algorithm/copy_n Exceptions 部分中有一行有趣的代码: 如果算法分配内存失败
我想用 C++ 打印出 std::vector 的内容。 这是我的: #include #include #include #include using namespace std; int
我试图实现一种反序列化方法,该方法采用输入迭代器并执行一系列 block 读取(使用 std::copy 和 std::copy_n )。像这样(只是一个例子): template InputIt
我是一名优秀的程序员,十分优秀!