C++ 堆栈上有成员的向量

C++ 堆栈上有成员的向量,c++,c++11,vector,c++14,C++,C++11,Vector,C++14,我想要这种接口 #include <vector> void fun(std::vector<int> v){ } int main(){ fun({1, 2, 3, 4}); //<-- this type of invocation } 我可以让向量进入堆栈(或者使用行为类似于堆栈向量上的向量的东西)吗 (std::array似乎可以做堆栈部分,但它需要一个明确的硬编码大小,我不希望这样。) 这是一个过早优化的问题,真的,但我很好奇。astd::vecto

我想要这种接口

#include <vector>
void fun(std::vector<int> v){ }
int main(){
  fun({1, 2, 3, 4}); //<-- this type of invocation
}
我可以让向量进入堆栈(或者使用行为类似于堆栈向量上的向量的东西)吗

std::array
似乎可以做堆栈部分,但它需要一个明确的硬编码大小,我不希望这样。)


这是一个过早优化的问题,真的,但我很好奇。

a
std::vector
使用堆来存储其元素,因此如果需要将元素放在堆栈上,就不能使用它

可以使用
std::array
或原始数组
T[]
将元素保留在堆栈上。使用模板,您可以删除界面中的长度参数:

template<int size>
void func(int(&)[size]) { 
    // Code 
}

int main() {
    int a[] = { 1,2,3,4 };
    func(a);
}
模板
void func(int(&)[size]){
//代码
}
int main(){
int a[]={1,2,3,4};
func(a);
}

您明确希望使用有限堆栈的任何原因(好奇除外?“这是一个过早优化的问题”-是的,是的。没有简单的方法可以通过可变长度实现这一点。在tho'之前已经有人问过了。我会试着把这个标记为dublicate。还是我误解了,你已经工作了。你可以考虑为向量实现你自己的分配器,以避免自由存储。否则我就不知道该怎么办了@Galik它工作,但使用堆。OP想要在堆栈上。
template<int size>
void func(int(&)[size]) { 
    // Code 
}

int main() {
    int a[] = { 1,2,3,4 };
    func(a);
}