STL std::remove_copy
STL std::remove_copy
std::remove_copy
template <class InputIterator, class OutputIterator, class T>
OutputIterator remove_copy (InputIterator first, InputIterator last,
OutputIterator result, const T& val);
复制范围移除值,复制范围中的元素[第一个,最后一个)到从结果开始的范围,除了那些元素的值。输出容器必须足够大以保持结果。
q1.为什么输出容器的大小必须足够大才能容纳结果?这个容器能自己长吗
q2.为什么在执行remove_copy时会覆盖输出容器中以前的内容即,当我执行remove_copy(a.begin(),a.end(),b.begin(),' ');
时,容器b中以前的内容会丢失,它们会被新内容替换,为什么会这样?为什么remove_copy的结果没有附加在输出容器的开头?
为什么输出容器的大小必须足够大才能容纳后果这个容器能自己长吗?
否。怎么可能呢?所有的算法都是迭代器,你不能从它的迭代器访问容器的成员函数(这是扩展容器所必需的)。然而,也有一些特殊用途的迭代器知道如何扩展容器。std::front_insert_iterator
、std::back_insert_iterator
和std::insert_iterator
,它们保存对容器的引用,并在它们被取消引用和分配给.时分别调用push_front
、push_back
和insert
为什么当i是否执行remove_copy?
因为这就是算法的工作方式。这就是所有标准库算法的工作方式。他们对集装箱一无所知。并非所有迭代器都来自容器。并不是所有的容器都是可种植的。如果要附加到容器,请使用std::back_insert_iterator
,如上所述。您可以使用std::back_inserter
帮助器函数来方便地创建一个,而无需指定模板参数。例如:
std::remove_copy(source.begin(), source.end(), std::back_inserter(dest), value);
为什么输出容器的大小必须足够大才能容纳后果这个容器能自己长吗?
算法对序列进行操作。容器是创建序列的一种方法,但它们不是唯一的方法。所以,是的,容器可以被编写为在任何时候访问时都会增长,但序列通常不会做到这一点。
如果您有一个容器,可以使用std::inserter
创建一个输出迭代器,根据需要扩展容器。
为什么当i是否执行remove_copy?
它可能是,也可能不是,这取决于输出迭代器的作用。如果它是容器中的迭代器(而不是insert_iterator),那么它只能访问已经存在的元素,因此必须覆盖它们。如果它是输出流中的迭代器,那么它只向流中写入元素;没有任何内容被覆盖。
- 使用函数"remove"删除重复元素
- std::filesystem::copy throws filesystem_error
- 链表的泛型函数remove()与成员函数remove)
- 如何在 Boost.Asio 中使用 Zero-copy sendmsg/receive
- Qt:remove() 和 rmdir() 有什么区别
- remove(str.begin(), str.end(), );无法正常工作(我正在使用视觉工作室 2012)
- C++ 一个lambda浅拷贝const Type&如果它被赋予一个命名捕获,如[copy=val](){}?
- QML/C++/QObject Struct Copy
- C++赋值运算符,我们可以用 copy 替换它吗?
- 为什么我使用 std::copy() 收到运行时错误(分段错误)?
- 如何解决C++中声纳库贝静态代码分析错误"Explicitly define the missing copy constructor, move constructor .."
- 如何使用 std::copy 当类有"无符号字符和运算符[]"时
- std::remove() 按预期处理文字,但不能与取消引用的迭代器一起工作
- std::copy 导致运行时检查失败 #2
- 为什么 Clang 在命名空间'std'中没有名为 'copy' 的成员给出错误
- 这在C++ "It does not own the underlying data, and so is cheap to copy or assign"中意味着什么
- 为什么使用 <uint8_t>MSVC 2015 编译器的 std::vector::insert 比 std::copy 快 5 倍?
- 从 MATLAB 到 C++:相当于带有选项 'remove' 的 bwmorph
- 对于输出,std::copy是否比std::cout快
- 为二进制树编码remove()函数