繁体   English   中英

如何返回矢量 <T> 来自c ++中的函数

[英]How do I return a vector<T> from a function in c++

我正在创建一个通用的数据结构,我想返回一个包含我的结构中的一些对象的向量。

我试过了

template<class T>
vector<T> DataStructure<T>::getItems(int count)
{
    vector<T> items;
    for(int i = 0; i < count; i++)
        items.push_back(data[i]);      
    return items;
}

但编译说

错误:ISO C ++禁止声明'vector'没有类型

错误:预期';' 在'<'标记之前

vector未定义。

你需要#include <vector>并使用std::vector或者using namespace std;来指定它的命名using namespace std; 在你的职能或全球范围内(应该避免后一种建议)。


#include <vector>

template<class T>
std::vector<T> DataStructure<T>::getItems(int count)
{
    std::vector<T> items;
    for(int i = 0; i < count; i++)
        items.push_back(data[i]);      
    return items;
}

它是std::vector ,而不仅仅是vector 除此之外, data在代码段中未定义。 但总的来说,这是返回向量的方法。

作为@etarion完美答案的补充,假设data类型为T* ,最常用的执行操作的方法是:

template<class T>
std::vector<T> DataStructure<T>::getItems(int count)
{
    return std::vector<T>(data, data + count);
}

由于getItems的定义必须通过头文件可用,因为它是类模板的方法,因此最容易在类定义中定义它:

template<class T>
struct DataStructure {
  std::vector<T> getItems(int count) const {
    assert(0 <= count && count <= data.size());  // don't forget to check count

    // if you must use op[] with data:
    // std::vector<T> items;
    // for(int i = 0; i < count; i++)
    //   items.push_back(data[i]);      
    // return items;

    // if data is a container (using random-access iterators here):
    return std::vector<T>(data.begin(), data.begin() + count);

    // if data is an array:
    // return std::vector<T>(data, data + count);
  }

  std::vector<T> data;  // or is data something else?
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM