[英]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.