如何解决如何打印双指针数组
我有两个要打印的双指针数组
但是我不知道怎么做。.
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];
指针是不具有成员函数begin
和end
的标量对象。
因此,您必须使用幻数5
和39
来输出指针指向的已分配数组。
例如
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 举报,一经查实,本站将立刻删除。