【发布时间】:2018-06-11 13:59:06
【问题描述】:
我是 C++ 新手。因此还有使用指针的想法。 我有一些要排队的数组。我知道我的代码在使用指针时不起作用。但是我不知道我应该如何解决这个问题? 我需要队列中的元素是 float* 类型,以便以后与 BLAS 一起使用。
#include <iostream>
#include <queue>
using namespace std;
float* initialize(float* vec, int len){
for(int i = 0; i < len; ++i){
vec[i] = 0; // Initialize
}
return vec;
}
void printVector(float* vec, int len){
for(int i=0;i<len;i++)
cout << vec[i] << endl;
cout << "--" << endl;
}
int main ()
{
queue<float*> q;
int len = 3;
float* k = new float[len];
k = initialize(k,len);
for(int t=0;t<len;t++){
k[t] = 1;
printVector(k, len);
q.push(k);
k[t] = 0;
}
// I would like the one below to give same output as above
cout << "Should have been the same:" << endl;
while (!q.empty()){
printVector(q.front(), len);
q.pop();
}
return 0;
}
额外的问题是这些类型的“指针数组”有一个特殊的名称吗? 浮动* k = 新浮动[len];
【问题讨论】:
-
您可以使用
std::vector<float>。如果您必须将 C 数组传递给 BLAS 函数,您可以使用std::vector::data()(或&std::vector::operator[0])提取它们。std::vector::size()提供大小(元素数量)(可能也是必需的)。 -
k只是指向新数组第一个元素的指针。它与指向任何其他float的指针没有区别,除非你可以/必须用它做什么。 -
谢谢。是的,我明白这一点。但是,如果我希望 q.front() 成为 float*,我不知道如何解决这个问题。
-
@Christian 你可能不需要那个。如果你使用
std::queue<std::vector<float>>,你可以很容易地使用q.front().data()。 -
一般来说,您可以按照您尝试过的方式进行操作,但是:您只分配一次存储空间。要使其正常工作,您必须在循环中分配存储空间(带有
q.push();的存储空间)。另一个循环应该delete[]弹出的指针resp。 (否则您可能会出现内存泄漏。)正如您所做的那样,所有队列条目共享相同的存储空间(因此会产生副作用)。 => 分配指针不会复制指向的内容。