【发布时间】:2018-10-16 13:15:18
【问题描述】:
我想要一个函数,它遍历一个向量并选择一个元素,然后以指针的形式返回给消费者,即指针应该指向向量中的项目。到目前为止我所拥有的是:
#include <vector>
class data_t {
public:
data_t(){mydat=99;}
~data_t(){}
int get_dat(){return mydat;}
private:
int mydat;
};
void *myfunc(std::vector<data_t> foo);
int main(void) {
std::vector<data_t> container;
data_t tmp;
data_t *res=nullptr;
container.push_back(tmp);
container.push_back(tmp);
res = (data_t*)myfunc(container);
res->get_dat();
}
void *myfunc(std::vector<data_t> foo) {
for (auto itr = foo.begin(); itr != foo.end(); itr++) {
if (itr->get_dat())
return &*itr;
}
return nullptr;
}
但我不确定return &*itr - 因为首先取消引用迭代器然后返回指针似乎不太合适。另外,即使itr 是本地的,它确实指向全局可用的向量元素。
我怎样才能做得更好?
【问题讨论】:
-
虽然我不推荐使用当前的设计,但如果
foo是参考,它可以工作。因为它是foo是一个副本,所以你要返回一个指针,该指针指向container的 copy 中的元素,该元素在myfunc的末尾不再存在。