如何从c ++中的函数返回vector <t> </t>

时间:2011-01-26 19:23:55

标签: c++ generics vector

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

我试过

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',没有类型

错误:预期';'在'&lt;'之前令牌

4 个答案:

答案 0 :(得分:8)

vector未定义。

您需要#include <vector>并使用std::vector或在您的函数或全局范围内放置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;
}

答案 1 :(得分:4)

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:0)

由于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?
};