小编Zac*_*ack的帖子

C++ 向量成员初始化

vec我对以下程序中有关in的输出感到困惑Test。为什么它是一个大小为 100 而不是 1 的向量?我以为std::vector<T> var{a}是一样的std::vector<T> var = {a}

#include <iostream>
#include <vector>

using namespace std;
struct Value {
   int a;
   int b;
};

class Test {
  public:
    std::vector<struct Value> vec{100};  
};

class Test2 {
  public:
    std::vector<int> vec{100};  
};

int main()
{
    Test test;
    std::cout << "test size: " << test.vec.size() << std::endl;
    Test2 test2;
    std::cout << "test2 size: " << test2.vec.size();
    
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

test size: 100
test2 size: 1
Run Code Online (Sandbox Code Playgroud)

c++

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

C宏与varargs

我正在尝试编写一个宏,它返回几个整数的最小值.当我编译以下代码时,它会抛出错误"expected expression".我不知道那里有什么问题.有人能指出这段代码的问题吗?

#define SMALLEST (nums, (ret_val), ...)          \
do {                                             \
    int i, val;                                  \
    va_list vl;                                  \
    va_start(vl,nums);                           \
    (*ret_val) = va_arg(vl, int);                \
    for (i = 1; i < nums; i++)                   \
    {                                            \
        val=va_arg(vl, int);                     \
        if ((*ret_val) > val)                    \
            (*ret_val) = val;                    \
    }                                            \
    va_end(vl);                                  \
} while(0)

int main ()
{
  int nums = 3;
  int ret_val = 0;
  SMALLEST(nums, &ret_val, 1, 2, 3);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我只是对如何使用Macro感到好奇.

c

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

R ifelse替换列中的值

我的数据框中有一个列,如下所示:

Private
Private
Private
 ?
Private
Run Code Online (Sandbox Code Playgroud)

我要替换这个“?” 与私人。我有如下解决方案:

# Only replacing ? with Private 
df$var <- ifelse(df$var == " ?", " Private", df$var)
Run Code Online (Sandbox Code Playgroud)

但是,当我df$var在ifelse语句后打印该列时,这些值似乎不正确。这就是我得到的:

3
3
3
Private
3
Run Code Online (Sandbox Code Playgroud)

我不知道这里出了什么问题。

r

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

将属性转换为0或1

我有一个数据框,其中有一个名为income的属性,如下所示:

......  income
......   > 10 
......   <= 10
......   > 10
Run Code Online (Sandbox Code Playgroud)

转型后,看起来会像

    ......  income
    ......   1 
    ......   0
    ......   1
Run Code Online (Sandbox Code Playgroud)

如果它大于10,我想将此列转换为1,否则为0.

我目前正在做的是从数据帧中获取最后一列.然后在最后一列上运行if else语句.之后使用cbind将前n-1列与最后一列绑定.我想知道其他更有效的解决方案.

我只是学习如何使用R.如果您能为您的解决方案提供更多详细信息,我真的很感激.

r

2
推荐指数
1
解决办法
47
查看次数

搜索排序数组的最快搜索算法

我有一个只有值0和1的数组.它们分别存储在数组中.例如,数组可能有40%为0,剩余60%为1.我想找出0和1之间的分裂点.我想到的一种算法是二进制搜索.由于性能对我来说很重要,不确定二进制搜索是否能给我带来最佳性能.分裂点是随机分布的.该数组以0s和1s格式分割.

algorithm search

2
推荐指数
1
解决办法
9737
查看次数

C将指针作为参数传递给函数

我遇到了以下代码:

int H3I_hook(int (*progress_fn)(int*), int *id)
{
...
}
Run Code Online (Sandbox Code Playgroud)

我不明白(int*)第一个论点结束时的目的?

c parameters pointers function

2
推荐指数
1
解决办法
761
查看次数

OpenMP 多个线程更新同一数组

我的程序中有以下代码,我想使用 OpenMP 加速它。

...
for(i=curr_index; i < curr_index + rx_size; i+=2){ 
    int64_t tgt = rcvq[i];
    int64_t src = rcvq[i+1];
    if (!TEST(tgt)) {
        pred[tgt] = src;
        newq[newq_count++] = tgt;
    }
} 
Run Code Online (Sandbox Code Playgroud)

目前,我有一个版本如下:

...
chunk = rx_sz / omp_nthreads;

#pragma omp parallel for num_threads(omp_nthreads)
for (ii = 0; ii < omp_nthreads; ii++) { 
    int start = curr_index + ii * chunk;
    for (index = start; index < start + chunk; index +=2) { 
        int64_t tgt = rcvq[index];
        int64_t src = rcvq[index+1];
        if …
Run Code Online (Sandbox Code Playgroud)

c multithreading openmp race-condition

2
推荐指数
1
解决办法
5276
查看次数

将两种不同的返回类型保存在一个变量中

在下面的代码中,我想使用参数来保存两种不同的返回类型。所以我可以删除多余的代码。但是,我这里没有很好的解决方案。

我的版本:

if (...) { 
    auto params = gather_quantized_params(_params);
    // the following lines are just duplicated in different branches 
    auto results = _lstm_impl<FullLayer, FullBidirectionalLayer>(
        input, params, hx[0], hx[1], num_layers, dropout_p, train, bidirectional); 

   return results;
} else {
    auto params = gather_quantized_params_fp16(_params);
    auto results = _lstm_impl<FullLayer, FullBidirectionalLayer>(
        input, params, hx[0], hx[1], num_layers, dropout_p, train, bidirectional);
    return results 
}
Run Code Online (Sandbox Code Playgroud)

===相关功能的标题:

    static std::vector<QuantizedCellParamsFP16> 
gather_quantized_params_fp16(TensorList params) {
    ...}

  static std::vector<QuantizedCellParams> 
    gather_quantized_params(TensorList params) { 
    ...} 

template<template<typename,typename> class LayerT, 
  template<typename,typename> class BidirLayerT, 
  typename cell_params, typename io_type> …
Run Code Online (Sandbox Code Playgroud)

c++ c++11

2
推荐指数
1
解决办法
136
查看次数

找出给定两个提交哈希值的提交数

在 Mercurial 存储库中,如何计算两个哈希之间的提交次数?

例如,如果树像

A
|
B
|
C
|
D
|
E
|
F
Run Code Online (Sandbox Code Playgroud)

如何找出 A 和 F 之间的提交次数?在本例中,该值为 4。

mercurial

2
推荐指数
1
解决办法
281
查看次数

为什么移动向量不触发移动内部元素?

对于下面的代码,我对 p3 向量感到困惑,为什么测试时没有触发移动运算符?对于p1和p2,我可以理解为所有元素都需要复制结束。

这是否意味着当我们移动向量时,它会修改向量对象,因此向量的元素将保持不变。而当我们复制向量时,我们必须复制每个元素。是否有向量运算会触发元素的移动运算符?

#include <iostream>
#include <vector> 

using namespace std;

class Test {
  public: 
    Test(int a) {
        std::cout << " default " << std::endl;
    }
    
    Test(const Test& o) {
        std::cout << " copy ctor " << std::endl;
    }
    
    Test& operator=(const Test& o) {
        std::cout << " copy assign " << std::endl;
        return *this;
    }
    
    Test(Test&& o) {
        std::cout << " move ctor" << std::endl;
    }
    
    Test& operator=(Test&& o) {
        std::cout << " move assign " << std::endl;
        return *this; …
Run Code Online (Sandbox Code Playgroud)

c++

2
推荐指数
1
解决办法
166
查看次数