【问题标题】:Equivalent for emplace and reserve functions in C program等效于 C 程序中的 emplace 和 reserve 函数
【发布时间】:2021-08-19 16:37:49
【问题描述】:

我正在尝试将以下代码从 C++ 转换为 C。

我创建了一个数组,但我不确定什么可以精确替换 emplace()reserve() 以及 size_t,在这种情况下可以做什么?

template<size_t X>
Student(float const(&rollnums)[X][5])
{
   class.reserve(X);
   for(size_t i =0; i< X; i++)
   {
      class.emplace(class.end(), rollnums[i];
   }

地点:

typedef struct _student
{
   std::vector<float> class;

}student;

【问题讨论】:

  • 也许在关注emplacereserve 的实现之前,您应该(以典型的C 风格)首先关注数据结构。要替换 std::vector,您需要管理指针、分配的大小和使用的大小。
  • emplace 只是将其构建到位;这是 C 语言中的自然默认值。
  • 要转换,您需要完全重写代码。不要尝试翻译。
  • emplacereserve 的存在主要是为了避免冗余的构造函数调用。 C 没有构造函数,所以这很没有实际意义。

标签: c++ c vector size-t emplace


【解决方案1】:

没有确切的等价物,但与 C 中的std::vector::reserve 最接近的类似物是标准库函数realloc,与std::vector::emplace 最接近的类似物是将指针强制转换为所需的类型,通过它间接传递,并且分配左值。

附: _student 标识符保留给文件范围(在 C 中)和全局命名空间(在 C++ 中)中的语言实现。您应该使用另一个标识符。另外class是C++中的关键字,不能用作标识符。

【讨论】:

    猜你喜欢
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    • 2012-05-27
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多