小编def*_*ode的帖子

从std :: heap的中间删除一个元素

我正在使用优先级队列作为具有一个额外要求的调度程序.我需要能够取消预定的项目.这相当于从优先级队列的中间删除项目.

我无法使用std::priority_queue除了top之外的任何元素的访问受到保护.

我正在尝试使用algorithm堆函数.但我仍然错过了我需要的那件作品.当我从堆中间删除一个元素时,我希望它能够有效地重建它自己.C++提供了这些堆函数:

  • std::make_heap O(3N)
  • std::push_heap O(LG(n))的
  • std::pop_heap O(2 lg(n))

我想要一个像std::repair_heap大O < 3n这样的新功能.我将它提供了取消项目所在的洞的位置,它将适当地调整堆.

不提供std::repair_heap功能似乎是一个巨大的疏忽.我错过了一些明显的东西吗

是否有提供符合stl标准的库std::repair_heap

是否有更好的数据结构来建模调度程序?

注意:由于某些原因,
我没有使用std::map.

  • 堆具有恒定的内存开销.
  • 堆具有令人敬畏的缓存局部性.

c++ stl priority-queue data-structures

14
推荐指数
2
解决办法
6355
查看次数

在c ++ 0x中wchar_t的命运是什么?

什么是命运wchar_t中的C++ 0x考虑新的字符类型char8_t,char16_tchar32_t

更重要的是,怎么样std::wstring,std::wcout等等?

w*家庭类是否已被弃用?
是否有新的字符类型的新类std::ustringstd::Ustring类?

c++ unicode wchar c++11

14
推荐指数
1
解决办法
1633
查看次数

与lambdas相比,std :: bind仍然有用吗?

可能重复:
绑定与Lambda?

std::bind由于lambdas获得了广泛的支持,我的使用已降至0.

是否有任何特别std::bind适合lambda函数的问题?

有没有令人信服的理由保持std::bind标准一旦增加了lambda?

c++ lambda bind c++11

14
推荐指数
1
解决办法
3754
查看次数

为什么缺少std :: u16cout?

C++ 03定义了两种字符类型:charwchar_t.(让我们忽略signed charunsigned char疯狂).

那么这两个字符被施加到std::basic_string,std::basic_ostream等作为std::string/std::wstringstd::ostream/std::wostream.

从流中,标准库还定义了全局变量std::coutstd::wcout.

新的C++ 0x标准定义了两种更多字符类型char16_tchar32_t.但是,唯一的新typedef是std::u16stringstd::u32string.

为什么没有标准供应std::u16ostream?或者怎么样std::u32cout

c++ unicode io c++11

13
推荐指数
1
解决办法
2015
查看次数

使用互斥量作为信号量?

我需要两个线程以"tick tock"模式进行.当使用信号量实现时,这看起来很好:

Semaphore tick_sem(1);
Semaphore tock_sem(0);

void ticker( void )
{
   while( true )
   {
      P( tick_sem );
      do_tick();
      V( tock_sem );
   }
}

void tocker( void )
{
   while( true )
   {
      P( tock_sem );
      do_tock();
      V( tick_sem );
   }
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用互斥锁(在技术上是一个二进制信号量)做同样的事情,它有一个奇怪的代码气味.

std::mutex tick_mutex;
std::mutex tock_mutex;
tock_mutex.lock();

void ticker( void )
{
   while( true )
   {
      tick_mutex.lock();
      do_tick();
      tock_mutex.unlock();
   }
}

void tocker( void )
{
   while( true )
   {
      tock_mutex.lock()
      do_tock();
      tick_mutex.unlock();
   }
}
Run Code Online (Sandbox Code Playgroud)

我认为气味是互斥不是为了将信息传达给另一个线程.(c ++ …

c++ concurrency mutex semaphore c++11

13
推荐指数
2
解决办法
5230
查看次数

如何使用C++ 11统一初始化语法?

我无法理解何时以及如何在C++ 11中使用新的统一初始化语法.
例如,我得到这个:

std::string a{"hello world"}; // OK
std::string b{a};  // NOT OK
Run Code Online (Sandbox Code Playgroud)

为什么在第二种情况下不起作用?错误是:

error: no matching function for call to ‘std::basic_string<char>::basic_string(<brace enclosed initializer list>)’    
Run Code Online (Sandbox Code Playgroud)

使用此版本的g ++ g++ (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2.

对于原始数据,我应该使用什么语法?

int i = 5;
int i{5};
int i = {5};
Run Code Online (Sandbox Code Playgroud)

c++ uniform-initialization c++11

13
推荐指数
2
解决办法
7405
查看次数

是否有Windows API来检测USB过流?

我正在尝试编写一个应用程序,当它检测到任何USB端口上的过流情况时将采取特定操作.

但是,我的googlefu无法提供任何有用的东西(尽管我现在可以告诉你101种修复USB过流问题的方法).

是否有标准的Windows API来检索USB状态信息?
如果没有,是否有其他/更好的方法以编程方式检测USB过流情况?

c c++ windows usb

13
推荐指数
1
解决办法
776
查看次数

从boost :: asio :: io_service中删除所有处理程序而不调用它们

我想在重用它之前从IO_service中删除所有处理程序.这可能吗?

我正在编写涉及一个单元测试的单元测试asio::io_service.在每个测试用例之间,我想清除全局的处理程序io_service.我认为那io_service::reset会是那样,但事实并非如此. reset()只允许io_service恢复.来自最后一个测试用例的所有处理程序仍在排队.

我只需要为单元测试做这个,所以任何疯狂的黑客都可以工作.


更多信息:

io_service是从一个deadline_timer成员变量.这deadline_timer是我正在测试的代码的一部分,所以我不能改变它的构造方式.我得到它的保持io_service通过deadline_timerget_io_service方法.

c++ boost-asio

12
推荐指数
1
解决办法
3199
查看次数

如何使用可变参数模板实现折叠

我有一个几乎可行的解决方案.但是,它无法编译一些简单的情况,我无法破译错误消息.

我目前的解决方案

#define AUTO_RETURN( EXPR ) -> decltype( EXPR ) \
{ return EXPR; }

template< typename BinaryFunc, typename First, typename Second >
auto foldl( BinaryFunc&& func, First&& first, Second&& second )
AUTO_RETURN( func( std::forward<First>(first), std::forward<Second>(second) ) )

template<typename BinaryFunc, typename First, typename Second, typename... Rest >
auto foldl( BinaryFunc&& func, First&& first, Second&& second, Rest&&... rest )
AUTO_RETURN(
   foldl(
      std::forward<BinaryFunc>(func),
      func( std::forward<First>(first), std::forward<Second>(second) ),
      std::forward<Rest>(rest)... )
   )
Run Code Online (Sandbox Code Playgroud)

按预期工作:

struct adder
{
   template< int LHS, int RHS > …
Run Code Online (Sandbox Code Playgroud)

c++ templates variadic-templates c++11

12
推荐指数
2
解决办法
1670
查看次数

信号与信号2

我的应用程序可能会受益于在本土解决方案中使用boost的信号库之一.

应用程序是多线程的,但执行信号处理的部分是单线程的.

如果多线程不是问题,有没有理由比Boost.Signal更喜欢Boost.Signals2?

c++ boost signals-slots boost-signals

12
推荐指数
2
解决办法
4410
查看次数