微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何打印双指针数组

如何解决如何打印双指针数组

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

但是我不知道怎么做。.

double *noise_feature = new double[5];
double *basic_feature = new double[39];
noise_feature_extraction(sig,len,noise_feature);
basic_feature_extraction(sig,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);

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

如何打印两个双精度数组以查看其值?

解决方法

您在堆上请求一个原始数组,并丢弃该信息中有多少个元素。回想一下

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

,

您声明了两个指针

double *noise_feature = new double[5];
double *basic_feature = new double[39];

指针是不具有成员函数beginend的标量对象。

因此,您必须使用幻数539来输出指针指向的已分配数组。

例如

cout << "\n";
printf("Noice features are");
for ( size_t i = 0; i < 5; ++i ) 
    cout << noise_feature[i] << " "; 
cout << "\n";

printf("Basic features are");
for ( size_t i = 0; i < 39; ++i ) 
    cout << basic_feature[i] << " "; 
cout << "\n";

例如,可以使用指针来完成

cout << "\n";
printf("Noice features are");
for ( auto p = noise_feature; p != noise_feature + 5; ++p ) 
    cout << *p << " "; 
cout << "\n";

printf("Basic features are");
for ( auto p = basic_feature; p != basic_feature + 39; ++p ) 
    cout << *p << " "; 
cout << "\n";

请注意,您可以使用标准容器std::vector来代替“手动”分配动态数组,例如

#include <vector>

//...

std::vector<double> noise_feature( 5 );

//...

cout << "\n";
printf("Noice features are");
for ( const auto &item : noise_feature ) 
    cout << item << " "; 
cout << "\n";

//...
,

用诸如array_name[element_count]之类的语句定义的数组不是任何类的对象!

数组实际上是指向连续内存的指针。因此,它们没有任何方法和成员函数。因此您的代码将无法编译。所以代替这个:

for (auto i = noise_feature.begin(); i != noise_feature.end(); ++i)

使用此:

for (auto i = noise_feature; i != noise_feature + 5; ++i)

或者这个:

for (auto i = std::begin(noise_feature); i != std::end(noise_feature); ++i)

或者您可以将其存储在std::vector<double>对象中。此外,为什么在C ++提供printf时使用std::cout

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。