我正在寻找数据结构,我可以在一个向量中存储多个向量,而不会有碎片或任何性能问题.
现在这样做
std::vector< std::vector<SomeType> > myMultiVector;
Run Code Online (Sandbox Code Playgroud)
会有所帮助,但是根据我的理解,内存会碎片化,因为myMultiVector中的每个向量都不会位于连续的空间中,因为它的分配方案.
这不是用于创建从一开始就知道尺寸或尺寸的阵列.各个方向的尺寸都是动态的.我想要的是一个像那样的结构,其中分配的大小是连续的.我希望能够在向量向量和每个向量本身上执行类似push_back()和resize()的操作.矢量的大小应该能够不同.
我一直在看看Boost :: Multiarray.似乎有希望,但不想要一个阵列,我想要一些dyanmic的东西.我仍然不确定,但如果我能以有效的方式改变尺寸,我可以改变尺寸.也许Boost :: Multiarray就是答案.
我也一直在考虑使用std :: multimap甚至std :: unordered_multimap并使用密钥作为索引,因为内部排序和散列我不确定它是否是正确的结构,尽管分配空间应该是连续的.
使用std :: vector <std :: vector> myMultiVector; 适用于我需要的东西,但我觉得有一个错过优化的机会.
您知道哪些其他替代品可以帮助提供更有效的载体载体?让我知道 :-)
注意:我知道问题与此处提出的问题非常相似.我只是要求替代方案不能解决特定问题.
基于此条目的想法从函数返回"const char*"是一个好主意吗?
我想用另一个问题来解决这个问题.
请考虑以下代码:
#include <string>
#include <cstdio>
const char * GetSomeString()
{
std::string somestlstring;
somestlstring = "Hello World!";
return somestlstring.c_str();
}
int main()
{
const char * tmp = GetSomeString();
printf("%s\n", tmp);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我用它构建它
g++ source.cpp -o executable
Run Code Online (Sandbox Code Playgroud)
并执行它,我显示奇怪的符号.这是因为somestlstring通过callstack被销毁,并且你在返回后保留的指针变得无效.
我的问题是:如果没有实际声明其他全局变量或潜在的成员函数,我应该如何设计一个没有这种行为的方法或函数?