首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

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

2013-07-09 
C++ 函数 返回 一个动态数组(vector)我想要写一个函数,返回值是一个动态数组(我用一个vector 容器),如何写

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);
}

 

热点排行