Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何返回向量<;T>;从c++;_C++_Generics_Vector - Fatal编程技术网

C++ 如何返回向量<;T>;从c++;

C++ 如何返回向量<;T>;从c++;,c++,generics,vector,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;

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

我试过了

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;
}
模板
向量数据结构::getItems(整数计数)
{
向量项;
for(int i=0;i
但是编译器说

错误:ISO C++禁止声明“vector”,没有类型< /p>
错误:应为“;”在“
之前,未定义向量

您需要
#包括
,并使用
std::vector
或使用命名空间std放置一个


#包括
模板
std::vector数据结构::getItems(整数计数)
{
向量项;
for(int i=0;i
它是
std::vector
,而不仅仅是
vector
。除此之外,
数据
在代码段中未定义。但一般来说,这是返回向量的方法。

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

template<class T>
std::vector<T> DataStructure<T>::getItems(int count)
{
    return std::vector<T>(data, data + count);
}
模板
std::vector数据结构::getItems(整数计数)
{
返回标准::向量(数据,数据+计数);
}

由于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?
};
模板
结构数据结构{
std::vector getItems(int count)常量{

assert(0请永远不要推荐
使用命名空间
指令,它带来的麻烦比它的价值还多:/@Matthieu M:我不推荐它,只是说这是一个可能的解决方案。我认为我们应该讨论
使用
指令(并说明为什么应该避免!)而不是隐藏它,否则当我们交谈的人会遇到它,他们将不知道它是什么,并可能会滥用它。
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?
};