- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我大致有以下代码应该将唯一段索引收集到 uniques
中:
vector< int > segments;
// segments vector is filled in here
// ...
sort( segments.begin(), segments.end() );
vector< int > uniques;
uniques.reserve( segments.size() );
#ifdef USE_STD_UNIQUE_COPY
unique_copy( segments.begin(), segments.end(), uniques.begin() );
#else
if( segments.size() > 0 )
uniques.push_back( segments[ 0 ] );
for( size_t i = 1; i < segments.size(); ++i)
{
if( segments[ i ] != uniques.back() )
uniques.push_back( segments[ i ] );
}
#endif
当 USE_STD_UNIQUE_COPY
被定义时,代码失败;当它未定义时,它会按预期工作。整件作品在多个线程上运行,我还没有调试 std::unique_copy
输出究竟有何不同。无论如何,根据 cppreference std::unique_copy (1)
应该完全按照代码的 #else
部分执行。
因此问题来了:这张图片有什么问题? std::unique_copy
是否有限制,也许不是线程安全的?还是我误读了 cppreference 并错误地使用了它?
最佳答案
问题是您正在尝试复制到无效的目标范围。本质上,您对 reserve 的调用分配了 vector 所需的空间,但实际上并没有改变它的大小。所以你不能直接复制到它的元素。您的替代代码有效,因为对 push_back 的调用将 vector 大小扩展 1 并追加到末尾。
正如评论中已经指出的那样,有一种聪明的方法可以使用 unique_copy 。您将其更改为对目标范围使用 back_inserter。
unique_copy(segments.begin(), segments.end(), back_inserter(uniques));
back_inserter 创建一个 back_insert_iterator,当复制到它时,调用容器上的 push_back。
关于c++ - std::unique_copy(或我对它的使用)有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37929702/
这是在 cplusplus.com 上找到的实现 template OutputIterator unique_copy (InputIterator first, InputIterator
我有这个简单的代码,我知道我一定犯了一些愚蠢的错误: #include #include #include #include #include using namespace std; int mai
我无法理解编译器错误消息关于 unique_copy 的含义: error C2672: 'operator __surrogate_func': no matching overloaded fun
我有一个 map我想使用 unique_copy将值放入 vector .我试过这个但它不起作用: #include #include #include #include #include
我大致有以下代码应该将唯一段索引收集到 uniques 中: vector segments; // segments vector is filled in here //
我已经实现了我的 unique_copy 版本它有效。问题是我必须这样调用它: my_unique_copy( in.begin(), // ok in
问题 考虑以下 vector : std::vector extensions; extensions.push_back(".cpp"); extensions.push_back(".CPP");
我是一名优秀的程序员,十分优秀!