【问题标题】:A vector with members on the stack [duplicate]与成员的传染媒介在堆栈[重复]
【发布时间】:2015-11-29 13:08:35
【问题描述】:

我想要这样的界面

#include <vector>
void fun(std::vector<int> v){ }
int main(){
  fun({1, 2, 3, 4}); //<-- this type of invocation
}

而不是

void fun(int argc, int* args){ }
int main(){
   int a[]={1,2,3,4};
   fun(sizeof(a)/sizeof(int), a);
}

我可以让向量进入堆栈(或使用类似堆栈向量的东西)吗?

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

确实,这是一个过早的优化类型的问题,但我很好奇。

【问题讨论】:

  • 有什么理由(除了好奇之外)为什么要明确使用有限堆栈?
  • “这是一个过早的优化类型的问题” - 是的。没有简单的方法可以通过可变长度来实现这一点。之前有人问过。我会尝试将此标记为重复。
  • 我是不是误会了,你已经工作了。
  • 您可能会考虑为向量实现自己的分配器,以避免免费存储。否则我不明白怎么做。 @Galik它有效,但使用堆。 OP 想要在堆栈上

标签: c++ c++11 vector c++14


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2016-06-15
    • 1970-01-01
    • 2011-08-15
    • 2011-02-18
    • 2014-11-29
    • 2018-01-06
    • 2014-06-23
    • 2023-03-16
    • 2016-06-08
    相关资源
    最近更新 更多