小编Ger*_*ein的帖子

矢量矢量作为高效的数据结构; std :: vector <std :: vector <someType >>的替代品

我正在寻找数据结构,我可以在一个向量中存储多个向量,而不会有碎片或任何性能问题.

现在这样做

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; 适用于我需要的东西,但我觉得有一个错过优化的机会.

您知道哪些其他替代品可以帮助提供更有效的载体载体?让我知道 :-)

注意:我知道问题与此处提出的问题非常相似.我只是要求替代方案不能解决特定问题.

c++ boost vector c++11

4
推荐指数
1
解决办法
2125
查看次数

设计返回有效字符串的方法或函数

基于此条目的想法从函数返回"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被销毁,并且你在返回后保留的指针变得无效.

我的问题是:如果没有实际声明其他全局变量或潜在的成员函数,我应该如何设计一个没有这种行为的方法或函数?

c++

2
推荐指数
1
解决办法
113
查看次数

标签 统计

c++ ×2

boost ×1

c++11 ×1

vector ×1