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