小编Adi*_*hag的帖子

C++ std :: vector emplace vs insert

我想知道两者之间有什么不同.我注意到emplace是c ++ 11的补充.那为什么要加?

c++ stl vector

44
推荐指数
2
解决办法
4万
查看次数

静态转换为右值引用和std :: move之间有什么区别吗?

静态演员的描述说

如果new_type是右值引用类型,则static_cast将expression的值转换为xvalue.这种类型的static_cast用于在std :: move中实现移动语义.(自C++ 11起)

这是否证实以下内容相同?

(一个)

X x1;
X x2 = static_cast<X&&>(x1); 
Run Code Online (Sandbox Code Playgroud)

(B)

X x1;
X x2 = std::move(x1);
Run Code Online (Sandbox Code Playgroud)

c++ move static-cast c++11

23
推荐指数
1
解决办法
4444
查看次数

R日期时间对齐和填充值

我有多个帧,为此目的假设2.每个帧包含2列 - 索引列和值列

sz<-5;
frame_1<-data.frame(index=sort(sample(1:10,sz,replace=F)),value=rpois(sz,50));
frame_2<-data.frame(index=sort(sample(1:10,sz,replace=F)),value=rpois(sz,50));
Run Code Online (Sandbox Code Playgroud)

FRAME_1:

 index value
  1    49
  6    62
  7    58
  8    30
 10    50
Run Code Online (Sandbox Code Playgroud)

frame_2:

index value
  4    60
  5    64
  6    48
  7    46
  9    57
Run Code Online (Sandbox Code Playgroud)

目标是创建第三帧frame_3,其索引将是frame_1和frame_2中的索引的并集,

frame_3<-data.frame(index = sort(union(frame_1$index,frame_2$index)));
Run Code Online (Sandbox Code Playgroud)

它将包含两个额外的列,value_1和value_2.

frame_3 $ value_1将从frame_1 $ value中填写,frame_3 $ value_2将从frame_2 $ value中填写;

这些应该填写如下:frame_3:

index value_1 value_2
1      49       NA
4      49       60     # value_1 is filled through with previous value
5      49       64     # value_1 is filled through with previous value
6      62       48     
7      58 …
Run Code Online (Sandbox Code Playgroud)

r vectorization dataframe

7
推荐指数
1
解决办法
907
查看次数

R gregexpr上的正则表达式匹配

我正在尝试计算连续3次"a"事件的实例"aaa".

该字符串将包括较低的字母表,例如 "abaaaababaaa"

我尝试了下面这段代码.但这种行为并不是我想要的.

x<-"abaaaababaaa";
gregexpr("aaa",x);
Run Code Online (Sandbox Code Playgroud)

我希望匹配返回"aaa"事件的3个实例,而不是2.

假设索引从1开始

  • 第一次出现的"aaa"是指数3.
  • 第二次出现的"aaa"是在索引4处.(这不是由gregexpr捕获的)
  • 第三次出现的"aaa"是指数10.

regex string r

5
推荐指数
1
解决办法
3446
查看次数

R箭头标记了图上的数据点

我希望用索引标记数据点 - 通过目视检查轻松识别索引号.

所以,例如,

x<-ts.plot(rnorm(10,0,1)) # would like to visually identify the data point indices easily through arrow labelling
Run Code Online (Sandbox Code Playgroud)

当然,如果有更好的方法来实现这一点,请建议

plot r

5
推荐指数
1
解决办法
1315
查看次数

R 浮点数精度在从字符转换时丢失

我有一个很大的浮点数作为这样的字符

  x<-"5374761693.91823";
Run Code Online (Sandbox Code Playgroud)

在做

 as.numeric(x); 
Run Code Online (Sandbox Code Playgroud)

我得到以下输出

   5374761694
Run Code Online (Sandbox Code Playgroud)

我想在转换时保留数字的浮点性质。

casting r numeric

5
推荐指数
1
解决办法
3239
查看次数

fetch_add使用acq_rel内存顺序

考虑一下

std::atomic<int> x(0);
Run Code Online (Sandbox Code Playgroud)

假设我有一个函数执行以下操作:

int x_old = x.fetch_add(1,std::memory_order_acq_rel);
Run Code Online (Sandbox Code Playgroud)

基于获取释放内存排序描述:

memory_order_relaxed 轻松操作:没有同步或排序约束,此操作只需要原子性(请参阅下面的轻松排序)

memory_order_consume具有此内存顺序的加载操作会对受影响的内存位置执行使用操作:在此加载之前,可以对当前线程中的取决于当前加载的值的读取或写入进行重新排序.在当前线程中可以看到对释放相同原子变量的其他线程中的数据相关变量的写入.在大多数平台上,这仅影响编译器优化(请参阅下面的Release-Consume排序)

memory_order_acquire具有此内存顺序的加载操作会对受影响的内存位置执行获取操作:在此加载之前,不能对当前线程中的读取或写入进行重新排序.在当前线程中可以看到释放相同原子变量的其他线程中的所有写入(请参阅下面的发布 - 获取顺序)

memory_order_release具有此内存顺序的存储操作执行释放操作:在此存储之后,不能对当前线程中的读取或写入进行重新排序.当前线程中的所有写入在获取相同原子变量的其他线程中都是可见的(请参阅下面的释放 - 获取排序),并且在原子变量中携带依赖关系的写入在消耗相同原子的其他线程中变得可见(请参阅Release-Consume订购如下).

memory_order_acq_rel具有此内存顺序的读取 - 修改 - 写入操作既是获取操作又是释放操作.当前线程中的内存读取或写入不能在此存储之前或之后重新排序.在修改之前,可以看到释放相同原子变量的其他线程中的所有写入,并且在获取相同原子变量的其他线程中可以看到修改.

memory_order_seq_cst具有此内存顺序的任何操作都是获取操作和释放操作,并且存在单个总顺序,其中所有线程以相同顺序观察所有修改(请参阅下面的顺序一致排序)

2个不同的线程是否可以接收相同x_old的0值?或者它们是否保证以x_old仅为其中一个为0 的方式执行,而对另一个为1.

如果x_old两者都为0,那么更改内存排序以std::memory_order_seq_cst保证唯一性x_old吗?

c++ atomic memory-model stdatomic

5
推荐指数
1
解决办法
1063
查看次数

未启用C++ SSE3指令集

我正在尝试使用来自的HMMlib库在c ++中处理一些隐藏的马尔可夫代码

http://www.cs.au.dk/~asand/?page_id=152
Run Code Online (Sandbox Code Playgroud)

我使用的是ubuntu 12.04,带有gcc/g ++ 4.6

我的编译步骤说明是:

g++ -I/usr/local/boost_1_52_0 -I../ MAIN.cpp
Run Code Online (Sandbox Code Playgroud)

这会产生以下错误:

In file included from ../HMMlib/allocator_traits.hpp:25:0,
             from ../HMMlib/hmm_table.hpp:25,
             from MAIN.cpp:1:
/usr/lib/gcc/i686-linux-gnu/4.6/include/pmmintrin.h:32:3: error: #error "SSE3      instruction set not enabled"
In file included from ../HMMlib/hmm_table.hpp:25:0,
             from MAIN.cpp:1:
../HMMlib/allocator_traits.hpp:50:33: error: ‘__m128d’ was not declared in this scope
../HMMlib/allocator_traits.hpp:50:40: error: template argument 2 is invalid
../HMMlib/allocator_traits.hpp:77:32: error: ‘__m128’ was not declared in this scope
../HMMlib/allocator_traits.hpp:77:38: error: template argument 2 is invalid
In file included from ../HMMlib/hmm_table.hpp:26:0,
             from MAIN.cpp:1:
../HMMlib/operator_traits.hpp:112:32: error: ‘__m128d’ was …
Run Code Online (Sandbox Code Playgroud)

c++ compiler-errors sse3

4
推荐指数
1
解决办法
7801
查看次数

可变增强绑定类型分辨率

我正在尝试编写一个异步记录器,它接受可变参数,然后使用可变参数stringer将它们串在一起,然后推送到单个生产者单个消费者队列.

我陷入了我的Log结构的enqueue函数部分,如下所示:

template <typename T>
std::string Log::stringer(T const & t){
    return boost::lexical_cast<std::string>(t);
}

template<typename T, typename ... Args>
std::string Log::stringer(T const & t, Args const & ... args){
    return stringer(t) + stringer(args...);
}

 template<typename T, typename ... Args>
 void Log::enqueue(T & t, Args & ... args){
     boost::function<std::string()> f 
        = boost::bind(&Log::stringer<T &, Args & ...>,this,
                      boost::ref(t),
                      boost::forward<Args>(args)...);
 /// the above statement fails to compile though if i use 'auto f' it works ->
 /// but then it is unclear to me …
Run Code Online (Sandbox Code Playgroud)

c++ templates bind boost-asio variadic-templates

4
推荐指数
1
解决办法
269
查看次数

提升 asio 读取/接收字节序

使用 boost asio tcp 读取函数或 udp 接收函数通过套接字读取数据到一个

 std::vector<char>, 
Run Code Online (Sandbox Code Playgroud)

数据是按网络字节顺序还是接收主机字节顺序填充向量?

c++ boost endianness boost-asio

3
推荐指数
1
解决办法
1550
查看次数