首页 > 解决方案 > 如何打印双指针数组

问题描述

我有两个要打印的双指针数组

但不知何故我无法做到..

double *noise_feature = new double[5];
double *basic_feature = new double[39];
noise_feature_extraction(sig, len, noise_feature);
basic_feature_extraction(sig, len, basic_feature);

cout << "\n";
printf("Noice features are");
for (auto i = noise_feature.begin(); i != noise_feature.end(); ++i) 
    cout << *i << " "; 
cout << "\n";

printf("Basic features are");
for (auto i = basic_feature.begin(); i != basic_feature.end(); ++i) 
    cout << *i << " "; 
cout << "\n";

这会产生这样的错误

Pan_Tompkins.cpp:992:29: error: member reference base type 'double *' is not a structure or union
        for (auto i = noise_feature.begin(); i != noise_feature.end(); ++i) 
                      ~~~~~~~~~~~~~^~~~~~
Pan_Tompkins.cpp:992:57: error: member reference base type 'double *' is not a structure or union
        for (auto i = noise_feature.begin(); i != noise_feature.end(); ++i) 

我试过这样打印

printf("%g",noise_feature);
printf("%g",basic_feature);

这不会给出错误,但也不会打印任何内容。

如何打印这两个双数组以查看它们的值?

标签: c++loopspointersvectorprintf

解决方案


您在堆上请求一个原始数组并丢弃它有多少元素的信息。回顾

double *noise_feature = new double[5];

只声明一个指向double. 您知道它是一个长度为 5 的连续数组这一事实可以以不同的方式使用。要么在代码中保留那个神奇的数字文字;

for (auto value = noise_feature; value != noise_feature + 5; ++value) 
    //       not maintainable, but works: ^^^^^^^^^^^^^^^^^
    cout << *value << " ";

或者你在堆栈上使用原始数组。在这里,长度被烘焙到类型中,因此不会丢失。例如,您可以使用基于范围的 for 循环对其进行迭代。

double noise_features[5];

// ...

for (double value : noise_features)
    std::cout << value << ' ';

std::vector但是,如果序列的大小仅在运行时已知,或者std::array它是固定长度的序列,则首选的解决方案是使用。


推荐阅读