C++ 如何创建变量类型的向量?

C++ 如何创建变量类型的向量?,c++,templates,vector,iterator,C++,Templates,Vector,Iterator,所以我有一个模板函数(?不确定它叫什么。以“template”开始,是一个函数)向量,我想保存一些数据。问题是–数据可能由int组成,可能由float组成,可能由其他向量组成–我只有一个迭代器指向该类型的变量。我可以为该类型创建一个向量吗?差不多 “std::vector”之类的 UPD 模板 void partial_sort(InputIterator first、InputIterator last、一元谓词pred){ std::向量到_排序; 我需要向量“to_sort”来保存被排序

所以我有一个模板函数(?不确定它叫什么。以“template”开始,是一个函数)向量,我想保存一些数据。问题是–数据可能由int组成,可能由float组成,可能由其他向量组成–我只有一个迭代器指向该类型的变量。我可以为该类型创建一个向量吗?差不多 “std::vector”之类的

UPD

模板
void partial_sort(InputIterator first、InputIterator last、一元谓词pred){
std::向量到_排序;
我需要向量“to_sort”来保存被排序的向量所保存的数据,但我所拥有的只是指向第一个和最后一个元素的迭代器。

使用

std::vector<typename std::iterator_traits<InputIterator>::value_type> to_sort(first, last);
// to_sort will be having all values between [first, last)
std::向量到_排序(第一,最后);
//to_排序的所有值都在[第一个,最后一个]之间

typedef typename std::iterator\u traits::value\u type\u value\u type;
std::向量到_排序(第一,最后);
//to_排序的所有值都在[第一个,最后一个]之间
使用

std::向量到_排序(第一,最后);
//to_排序的所有值都在[第一个,最后一个]之间

typedef typename std::iterator\u traits::value\u type\u value\u type;
std::向量到_排序(第一,最后);
//to_排序的所有值都在[第一个,最后一个]之间
模板
void myFunction(It b,It e){
auto-vec=std::vector{b,e};
//现在,vec中填充了b和e之间的值的副本
}
模板
void myFunction(It b,It e){
auto-vec=std::vector{b,e};
//现在,vec中填充了b和e之间的值的副本
}

使用c++14,您可以使用

typedef std::remove_reference<decltype(*first)>::type ValueType;
std::vector<ValueType> vec;
typedef std::remove_reference::type ValueType;
std::vec;

使用c++14,您可以使用

typedef std::remove_reference<decltype(*first)>::type ValueType;
std::vector<ValueType> vec;
typedef std::remove_reference::type ValueType;
std::vec;


STD::vector并没有真正的帮助。通过模板参数,向量可以是一种类型,例如int。另一种可能性是创建一个空洞列表,并将其转换为真实类型,但这很难看。也许你应该考虑存储一个自定义数据类型,它可以处理你的问题域的需求,你可以添加你的函数吗?de?能否显示模板函数的签名,即
template
部分和所有参数的列表,直到左括号?如果使用未知类型的迭代器作为参数,请同时显示该迭代器。一些代码可能会有所帮助。您可以使用
std::ite获取迭代器指向的值的类型rator\u traits::value\u type
。因此,您可以通过
std::vec;
定义向量,其中
It
是迭代器的类型。@anhope我认为OP不想在同一个向量中混合不同类型的项;我认为他不知道创建模板捕获的类型的向量的语法。std::vector知道通过模板参数,向量可以是一种类型,例如int。另一种可能性是创建一个空洞列表,并将其转换为真实类型,但这很难看。也许你应该考虑存储一个自定义数据类型,它可以处理你的问题域的需求。你可以添加你的函数代码吗?你能显示这个符号吗?模板函数的真实性,即
template
部分和所有参数的列表,直到左括号?如果将未知类型的迭代器作为参数,请同时显示该迭代器。一些代码可能会有所帮助。您可以使用
std::iterator\u traits::value\u type。因此,您可以通过
std::vector vec;
定义向量,其中
是迭代器的类型。@anhoppe我认为OP不想在同一个向量中混合不同类型的项;我认为他不知道创建模板捕获类型的向量的语法。为什么使用
auto
而不是
>std::vector vec{b,e}
?@HolyBlackCat编译器会自动推断返回类型。@mnciitbhu请再次查看我的代码。他使用了
auto var=T(params);
而不是更多obivous
T var(params);
@HolyBlackCat抱歉,我误解了。+1回答你的问题。你为什么用
auto
而不是
std::vec{b,e}
?@HolyBlackCat编译器会自动推断返回类型。@mnciitbhu请再看看我的代码。他使用
auto var=T(params);
而不是更多obivous
T var(params)另外,C++的14也可以使用“<代码> STD::ReaveViReXixOntIt/<代码>代替“代码> STD::ReaveViRe::/Cype >也可以从C++ 1中使用.<代码> STD::ReaveViReXixIONT < /COD>而不是<代码> STD::ReleViRoo::/Type < /Cord>
template <class It>
void myFunction (It b, It e) {
   auto vec = std::vector<typename std::iterator_traits<It>::value_type> { b, e };
   // now vec is filled with copies of the values between b and e
}
typedef std::remove_reference<decltype(*first)>::type ValueType;
std::vector<ValueType> vec;