我正在使用优先级队列作为具有一个额外要求的调度程序.我需要能够取消预定的项目.这相当于从优先级队列的中间删除项目.
我无法使用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.
什么是命运wchar_t中的C++ 0x考虑新的字符类型char8_t,char16_t和char32_t?
更重要的是,怎么样std::wstring,std::wcout等等?
w*家庭类是否已被弃用?
是否有新的字符类型的新类std::ustring和std::Ustring类?
可能重复:
绑定与Lambda?
std::bind由于lambdas获得了广泛的支持,我的使用已降至0.
是否有任何特别std::bind适合lambda函数的问题?
有没有令人信服的理由保持std::bind标准一旦增加了lambda?
C++ 03定义了两种字符类型:char和wchar_t.(让我们忽略signed char和unsigned char疯狂).
那么这两个字符被施加到std::basic_string,std::basic_ostream等作为std::string/std::wstring和std::ostream/std::wostream.
从流中,标准库还定义了全局变量std::cout和std::wcout.
新的C++ 0x标准定义了两种更多字符类型char16_t和char32_t.但是,唯一的新typedef是std::u16string和std::u32string.
为什么没有标准供应std::u16ostream?或者怎么样std::u32cout?
我需要两个线程以"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++ 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) 我正在尝试编写一个应用程序,当它检测到任何USB端口上的过流情况时将采取特定操作.
但是,我的googlefu无法提供任何有用的东西(尽管我现在可以告诉你101种修复USB过流问题的方法).
是否有标准的Windows API来检索USB状态信息?
如果没有,是否有其他/更好的方法以编程方式检测USB过流情况?
我想在重用它之前从IO_service中删除所有处理程序.这可能吗?
我正在编写涉及一个单元测试的单元测试asio::io_service.在每个测试用例之间,我想清除全局的处理程序io_service.我认为那io_service::reset会是那样,但事实并非如此. reset()只允许io_service恢复.来自最后一个测试用例的所有处理程序仍在排队.
我只需要为单元测试做这个,所以任何疯狂的黑客都可以工作.
更多信息:
的io_service是从一个deadline_timer成员变量.这deadline_timer是我正在测试的代码的一部分,所以我不能改变它的构造方式.我得到它的保持io_service通过deadline_timer的get_io_service方法.
我有一个几乎可行的解决方案.但是,它无法编译一些简单的情况,我无法破译错误消息.
我目前的解决方案
#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) 我的应用程序可能会受益于在本土解决方案中使用boost的信号库之一.
应用程序是多线程的,但执行信号处理的部分是单线程的.
如果多线程不是问题,有没有理由比Boost.Signal更喜欢Boost.Signals2?