如何实现无限的多维数组?(How to implement infinite multidimens

2019-10-16 16:06发布

我想用下面的代码,我想用它来“输入未知大小”。 例如,有一个阵列int cac[1000][1000] 我可以使用vector<vector<int> > array; ,那我怎么才能用初始化-1 ? 有什么建议么?

#include <sstream>
#include <iostream>
#include <vector>
#include <cstdlib>
#include <memory.h>

using namespace std;

int cac[1000][1000];
string res[1000][1000];
vector<string> words;
int M;

int go(int a, int b){
 if(cac[a][b]>= 0) return cac[a][b];
 if(a == b) return 0;

 int csum = -1;
 for(int i=a; i<b; ++i){
  csum += words[i].size() + 1;
 }
 if(csum <= M || a == b-1){
  string sep = "";
    for(int i=a; i<b; ++i){
        res[a][b].append(sep);
        res[a][b].append(words[i]);
        sep = " ";
    }
  return cac[a][b] = (M-csum)*(M-csum);
 }

 int ret = 1000000000;
 int best_sp = -1;
 for(int sp=a+1; sp<b; ++sp){
 int cur = go(a, sp) + go(sp,b);
 if(cur <= ret){
    ret = cur;
    best_sp = sp;
 }
 }
 res[a][b] = res[a][best_sp] + "\n" + res[best_sp][b];
 return cac[a][b] = ret;
 }


int main(int argc, char ** argv){
memset(cac, -1, sizeof(cac));
M = atoi(argv[1]);
string word;
while(cin >> word) words.push_back(word);
go(0, words.size());
cout << res[0][words.size()] << endl;
}

Answer 1:

你可以做的是使用一个关联数组,其中关键是一对( rowPositionColumnPosition )。 当你要设置array[i][j]你只需要添加或更新值assoArray[Pair(i,j)] 可以假定这是不关联数组中任一元素的初始值。

一般来说无限多维数组用于理论purpose.I希望我没有误解的问题。



Answer 2:

从使用STL的std ::向量比下面的解决方案,它指出在这篇文章的评论更为直接。 我发现这个网站有效地解释了话题: http://www.learncpp.com/cpp-programming/16-2-stl-containers-overview/

无限大小的数组实际上不太可能。 但是,您可以使用动态分配基本上达到这样的效果。 下面是一些示例代码:

int counter = 0;
int* myArray = new int[1000];

用数据填充数组,每次添加一个值时递增计数器。 当计数器达到1000,请执行以下操作:

int* largerArray = new int[2000];
for( int i = 0; i < 1000; i++ )
{
    largerArray[i] = myArray[i];
}
delete[] myArray;
myArray = largerArray;

使用这种方法,您可以创建一个无限大小的数组最接近可能的,我不相信性能会与复制件的问题



文章来源: How to implement infinite multidimensional array?
标签: c++ arrays size