将向量作为函数参数传递
Posted
技术标签:
【中文标题】将向量作为函数参数传递【英文标题】:Passing a vector as function parameter 【发布时间】:2014-04-23 20:05:20 【问题描述】:在 VS 2013 中我可以做到
void myFunction(vector<int> myVector)
// Do something with myVector
我可以使用以下功能:
void anotherFunction()
myFunction(1, 25, 33, 45, 80);
但如果我使用 Xcode 3.5 (GCC 4.2) 编译此代码,我会收到错误“Expected primary expression before '' token”和“No matching function for call to anotherFunction (无效)”。
是否有一种优雅的解决方法可以让 GCC 4.2 理解我将常量向量作为函数参数传递?
【问题讨论】:
您需要 C++11 支持。海湾合作委员会 4.2。可能会提供一些,但可能还不够。 直到 GCC 4.8 才支持 C++11 的大部分内容(4.7 中部分支持)。 gcc.gnu.org/projects/cxx0x.html : 4.2 中不支持 C++11。 尝试转换为(vector<int>)1, 25, 33, 45, 80
类型 - 注意我不确定这是 100% 正确的模板转换方法!但是我之前以同样的方式初始化struct
s 时看到过这个错误!
@Rich 不,那行不通。
【参考方案1】:
GCC 中对initializer lists 的支持从版本 4.4 开始,请参阅here。编译器根本不理解语法。
您需要以 C++98 方式设置向量,例如:
void anotherFunction()
vector<int> myVector;
const int values[] = 1, 25, 33, 45, 80;
myVector.insert(myVector.begin(), values, values + sizeof(values)/sizeof(values[0]));
myFunction(myVector);
我认为没有比 C++98 更好的了。
【讨论】:
【参考方案2】:我很确定对于 GCC 4.2,您必须事先声明向量。另外,我会使用 vector
【讨论】:
你怎么知道他们不需要向量的副本? 值得注意的是,GCC 4.2 甚至不接受使用vector <int> myVector = 1, 5, 9 ;
初始化向量,这很烦人,因为我每次需要调用该函数时都必须声明和初始化一个新的 const 向量.以上是关于将向量作为函数参数传递的主要内容,如果未能解决你的问题,请参考以下文章
我们如何在 C++ 中将二维数组/向量作为函数参数传递? [复制]