读书人

C++ 函数 回到 一个动态数组(vector)

发布时间: 2013-07-09 09:50:48 作者: rapoo

C++ 函数 返回 一个动态数组(vector)
我想要写一个函数,返回值是一个动态数组(我用一个vector 容器),如何写
有两种方法
一、以 指针的方法
定义:


vector<int> *MyFind()
{
vector<int> *a=new vector<int>;

a->push_back(123);
a->push_back(23);

return a;
}

调用:

vector<int> *b=MyFind();
int k=b->size();
delete b ;


二是 利用引用
定义:

void Find(vector<int> &vect)
{
vect.push_back(1);
vect.push_back(3);
vect.push_back(5);

}


调用:

vector<int> b;
Find(b);



报同样的错误
错误1error LNK2019: 无法解析的外部符号 "public: void __thiscall CMyPointSysApp::Find(class std::vector<int,class std::allocator<int> > &)" (?Find@CMyPointSysApp@@QAEXAAV?$vector@HV?$allocator@H@std@@@std@@@Z),该符号在函数 "public: void __thiscall CMyPointSysApp::sayhello(void)" (?sayhello@CMyPointSysApp@@QAEXXZ) 中被引用


错在哪里啊啊啊 啊

[解决办法]
引用:
Quote: 引用:

1:参见二楼
2:如果是VC,检查cpp文件是否包含在工程中,是否在“源文件” 子项下
3:选中该文件,查看属性看“从生成中排除”是不是为“否”。
4:检查vector有没有被某个头文件定义成宏。

题外话:new一个指针返回不好,用变参(非const引用类型参数)传回数据才是正道。
实现时Find函数不要去直接修改vector,应该定义一个vector的局部变量,所有操作都在这个局部变量上进行,最后再用vector.swap交换。


1.题外话:new一个指针返回不好,用变参(非const引用类型参数)传回数据才是正道?
新手不太明白?怎么改呢?
2.直接返回对象应该效率比较低吧?我想知道 参数引用、指针、对象 哪个方式效率最高,因为我操作的数据量很大?


不用改,你的方法二就是。
当然最好这样实现,这样函数可以保证在发生异常时原vect完全不受影响(保持原样)。

void Find(vector<int> &vect)
{
vector<int>temp;
temp.push_back(1);
temp.push_back(3);
temp.push_back(5);
temp.swap(vect);
}


读书人网 >C++

热点推荐