我正忙于动态的二维数组,我已将其声明如下:
string** MakeArray(int row,int col)
{
string** array;
array = new string* [col];
for(int r = 0; r < row; r++)
{
array[r] = new string [col];
}
return array;
}
现在我可以在数组中放置字符串值。如果我的数组是4乘99,那么如何将Integer值放在第一列中,将字符串放在第二列中,将整数放在第三列中?
答案 0 :(得分:3)
数组中的元素都是相同的类型。为了得到你想要的东西,你可能想要以一系列结构来开始:
struct whatever {
int a;
std::string b;
int c;
};
std::vector<whatever> your_array;
编辑:虽然这几乎肯定是一个糟糕的想法,如果你真的需要这个是2D数组,你可以尝试使所有元素都是同一类型的联合:
union whatever {
int a;
std::string b;
};
虽然这有一些相当严重的限制 - 实际上,将std::string
放入联盟并不是官方支持的。有一个相当不错的机会它会起作用,但根本不能保证它。如果你真的,真的需要做这样的事情,你可以使联盟的成员成为指针。这保证会起作用,但也保证是如此笨拙,以至于犯错误几乎是不可避免的。
答案 1 :(得分:2)
不要那样做。而是创建一个表示表中单个记录的结构,并包含一个字符串和两个整数。然后创建这些结构的一维数组。
struct record
{
int a;
std::string b;
int c;
};
record* MakeArray(int row)
{
return new record[row];
}
更好的是,沟渠数组并使用std :: vector:
std::vector<record> array(99);
答案 2 :(得分:1)
如果您有可用的C ++ 11,您是否看过有元组的向量/数组?所以你可以做一些事情,比如:
#include <tuple>
#include <vector>
typedef std::tuple<int, std::string, int> MyTuple;
std::vector<MyTuple> MakeVector()
{
std::vector<MyTuple> vecTuples;
for( int i = 0; i < 5; ++i )
{
vecTuples.emplace_back( std::make_tuple<int, std::string, int>( i, "Test"+i, i+5 ) );
}
return vecTuples;
}
答案 3 :(得分:0)
C ++是一种“强类型”语言。其中一个意思是你不能混合数据类型(除非它们是相关的,比如基础派生类的层次关系)。
换句话说,你所做的不是C ++直接支持的。
说过你可以做的事情可以做你想做的事情 - 拥有一系列三胞胎,就像这样:
struct triplet
{
int first;
string second;
int third;
};
triplet** MakeArray(...
您在示例中所做的事情看起来很像JS代码。也许您想要的是将所有数据存储为字符串?然后是的,您可以使用2D数组的字符串,但需要您在存储数据时将数据转换为字符串并从字符串转换回来进行计算。这是一个主要的性能问题