使用“auto”代替 std::vector<double>*

Posted

技术标签:

【中文标题】使用“auto”代替 std::vector<double>*【英文标题】:Use of "auto" in place of std::vector<double>* 【发布时间】:2014-07-28 06:18:35 【问题描述】:

我正在使用类似

的功能
void TestAnalyzer::AddBranch(std::vector<double>* vec, std::string name)
tree->Branch(name.c_str(),vec);

但有时我有 int 向量代替 vector&lt;double&gt;,所以我如何使用“auto”或其他东西,以便使用相同的参数读取 int 和 double。

【问题讨论】:

提供重载或使用函数模板。 当然,你需要做一些类似于tree-&gt;Branch 的事情。而auto 和它关系不大。 【参考方案1】:

您正在寻找的是一个模板。您将为每种矢量获得一个新的、不同的函数。

template< typename element_type >
void TestAnalyzer::AddBranch(std::vector<element_type>* vec, std::string name)
tree->Branch(name.c_str(),vec);

element_type 将从函数参数中推导出来,就像 auto 是从初始化程序中推导出来的。这种用法更原始,适用于 C++98(或许多预标准编译器)。

【讨论】:

@ramkrishna:值得注意的是,您可能还想将tree-&gt;Branch 设为模板。另外,出于效率原因,名称几乎可以肯定已被const 引用接受。【参考方案2】:

听起来你想要一个模板化的函数。

template<typename T> void TestAnalyzer::AddBranch(std::vector<T>* vec, std::string name)
   tree->Branch(name.c_str(),vec);

【讨论】:

以上是关于使用“auto”代替 std::vector<double>*的主要内容,如果未能解决你的问题,请参考以下文章

std::vector 与 std::list 与 std::slist 的相对性能?

将指向向量向量的指针移动到特定位置

新向量的向量

for-auto使用

错误使用 std::vector<std::string> myString

在 std::vector 上的 Visual Studio 2012 express 中的自动矢量化没有发生