2

我对 C++(来自 C#)有点陌生。

我想将数据数组传递给函数(作为指针)。

void someFunc(byte *data)
{
    // add this data to a hashmap.

    Hashtable.put(key, data)
}

该数据将被添加到哈希映射(一些基于键值的对象)中。

在 C# 中,我可以将传递的引用添加到字典并完成它。

可以在 C++ 中做同样的事情吗?还是我必须创建数据的副本,并且仅将其添加到数据结构中以进行存储?

我在一些代码示例中看到了这种模式,但我不是 100% 确定为什么需要它,或者在某些时候是否可以避免它。

4

2 回答 2

0

不确定您的密钥来自哪里......但是 thestd::map和 thestd::unordered_map可能是您正在寻找的。

现在 的底层数据结构std::map是二叉树,而std::unordered_map是散列。

此外,这std::unordered_map是 C++ 11 标准中的新增内容。

于 2013-07-16T21:31:58.620 回答
0

这一切都取决于您如何传递数据以及如何创建数据。如果数据是在堆上创建的(通过使用 new),您只需将指针或引用放在表中即可。另一方面,如果函数通过值获取参数,您将需要在某个时候进行复制,因为如果您存储临时地址,就会发生坏事:)。

至于使用什么数据结构,以及它们是如何工作的,我发现最好的参考之一是cppreference

堆分配应为特殊情况保留。堆栈分配更快且更易于管理,您应该阅读RAII(非常重要)。至于其他阅读,请尝试找出有关动态与自动内存分配的内容。

刚刚发现这篇文章专门说 C# to C++ 认为它对你来说是完美的,祝你好运,c++ 可能是更难学习的语言之一,所以不要假设任何东西都会像在 C# 中一样工作。MSDN有一个很好的 C# vs. C++ 的东西

于 2013-07-16T21:33:54.693 回答