小编Rob*_*obᵩ的帖子

从子类的STL向量到基类向量的转换

我想知道是否有可能将派生类值的向量转换为基类值的向量.具体来说,我希望能够将基类对象的向量传递给其形式参数采用基类向量的函数.它似乎不可能直接,因为下面的代码示例产生错误(使用g ++):

#include <vector>

class A {
};

class B : public A {
};


void function(std::vector<A> objs) {
}

int main(int argc, char **argv) {
    std::vector<B> objs_b;
    objs_b.push_back(B());
    function(objs_b);
}
Run Code Online (Sandbox Code Playgroud)

test.cc:16:错误:从'std :: vector <B,std :: allocator <B>>'转换为非标量类型'std :: vector <A,std :: allocator <A >>>'

我希望能够调用函数,而无需使用类型A的元素定义新向量,插入类型B的元素或更改为指针向量.

c++ oop polymorphism stl vector

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

有没有办法确定Linux PID是否暂停?

我有一个python脚本,它使用带有os.kill的SIGSTOP和.SIGCONT命令来暂停或恢复进程.有没有办法确定相关的PID是处于暂停还是恢复状态?

python linux controls pid process

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

char数组的内存分配

假设你有 -

struct Person {
    char *name;
    int age;
    int height;
    int weight; 
 };
Run Code Online (Sandbox Code Playgroud)

如果你这样做 -

struct Person *who = malloc(sizeof(struct Person));
Run Code Online (Sandbox Code Playgroud)

C如何知道为name变量分配多少内存,因为这可以容纳大量的数据/字符串?我是C的新手并且对内存分配感到困惑.

c memory-management

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

泛型如何在C++/CX中运行

我在互联网上找不到任何相关内容,所以我正在寻找能够深入了解C++/CX的方式的人.在维基百科的文章对C++/CX说,它支持基于运行时的仿制药,至极将意味着你不需要与全面实施的头文件,以实例化一个泛型类型.我承诺它如何适用于.NET(程序集包含IL代码,JIT只能在其中插入具体类型并在有新的实例化时编译它),但在C++/CX(本机编译)中没有JIT可以编辑运行时的代码(我认为x86机器代码非常难)

那么这里有什么诀窍,是用拳击或一些新设计方案进行类型擦除?

(我知道有关类型的元数据以.NET格式存储,我在方法中的代码之后)

c++ windows-runtime c++-cx

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

如何检查标准输出是否已关闭

我得到了一些打印到stdout的代码,伪代码看起来像

int main(){
    //allocate data
    while(conditional){
      char *string = makedata();
      fprintf(stdout,"%s",string);
    }
    //cleanup 
}
Run Code Online (Sandbox Code Playgroud)

这种方法很好,如果条件切换为零,但如果我管道输出像

./a.out |head -n10 >dumped
Run Code Online (Sandbox Code Playgroud)

然后代码永远不会到达清理部分,我不明白如何检查stdout是否关闭.

谢谢

c unix

6
推荐指数
1
解决办法
2175
查看次数

光学鼠标作为编码器

最近我发现了光学鼠标作为增量位置编码器的美感.

光学鼠标通常包含一个组件,其中相机链接到链接到USB接口的图像处理器.分辨率取决于相机分辨率.在互联网上,很容易找到这类组件的数据表,这些数据表还描述了如何使用它们进行读/写.

我首先需要解决的问题是如何确保笔记本电脑/ PC不会将编码器鼠标看作指点设备,而不会禁用它所连接的USB端口.我需要使用2个编码器,这意味着需要在我的PC(运行Windows XP)上使用3个USB端口,一个用于鼠标作为指点设备,两个用于鼠标作为编码器.

第二个问题是如何通过USB端口从/向编码器鼠标读/写指令/数据?有人可以给我发一个C++教程/示例的链接吗?

首先十分感谢,

斯特凡

c++ windows mouse winapi

6
推荐指数
1
解决办法
2788
查看次数

键盘的SendInput() - 仅小写

我有以下代码:

INPUT Input = { 0 };
Input.type       = INPUT_KEYBOARD;
Input.mi.dwFlags = KEYEVENTF_EXTENDEDKEY;
Input.ki.wVk   = 'A'; // tried 0x41, ( UCHAR )VkKeyScan( 'A' )
SendInput( 1, &Input, sizeof( INPUT ) );
Run Code Online (Sandbox Code Playgroud)

但它只会产生'a'.如何强制它生成大写?

谢谢.

keyboard winapi sendinput

6
推荐指数
1
解决办法
7585
查看次数

音频处理C++ - FFT

我可能会错误地问这个并让自己看起来非常愚蠢但是这里有:

我正在尝试对.wav文件进行一些音频操作和处理.现在,我能够读取所有数据(包括标题),但需要数据处于频率,为此,我需要使用FFT.

我搜索了互联网的高低,发现了一个,这个例子是从"C中的数字食谱"一书中摘录出来的,然而,我把它修改成使用向量而不是数组.好的,这就是问题所在:

我被给予(作为一个例子使用)一系列数字和采样率:

X = {50, 206, -100, -65, -50, -6, 100, -135}
Run Code Online (Sandbox Code Playgroud)

采样率:8000样本数:8

因此应该回答这个问题:

  0Hz     A=0       D=1.57079633
  1000Hz     A=50      D=1.57079633
  2000HZ     A=100     D=0
  3000HZ     A=100     D=0
  4000HZ     A=0       D=3.14159265
Run Code Online (Sandbox Code Playgroud)

我重写的代码编译,然而,当试图将这些数字输入到等式(函数)中时,我得到了一个分段错误.我的代码有问题,或者采样率是否过高?(当使用更小,更小的采样率时,算法不会分段).这是代码:

#include <iostream>
#include <math.h>
#include <vector>
using namespace std;

#define SWAP(a,b) tempr=(a);(a)=(b);(b)=tempr;
#define pi 3.14159

void ComplexFFT(vector<float> &realData, vector<float> &actualData, unsigned long sample_num, unsigned int sample_rate, int sign)
{
    unsigned long n, mmax, m, j, istep, i;
    double wtemp,wr,wpr,wpi,wi,theta,tempr,tempi;

    // CHECK TO SEE IF VECTOR IS EMPTY;

    actualData.resize(2*sample_rate, …
Run Code Online (Sandbox Code Playgroud)

c++ algorithm math fft

6
推荐指数
1
解决办法
2477
查看次数

如何在向量中找到5个最大元素的索引?

如何在向量中找到5个最大元素的索引?例如,std::vector<int>如何找到5个最大值但不改变原始矢量的索引?

c++ stl

6
推荐指数
2
解决办法
4657
查看次数

C++:std :: vector []运算符

为什么std :: vector有2个运算符[] 实现?

reference       operator[]( size_type pos );
const_reference operator[]( size_type pos ) const;
Run Code Online (Sandbox Code Playgroud)

c++ stl std stdvector

6
推荐指数
1
解决办法
2762
查看次数