嗨,我想做这样的事情:
int op(string s1, string s2){
int x = s1.size();
int y = s2.size();
int matrix = new int[x][y]
/* do stuff with matrix */
}
Run Code Online (Sandbox Code Playgroud)
出于某种原因,我收到以下错误:
SuperString.cpp(69) : error C2540: non-constant expression as array bound
SuperString.cpp(69) : error C2440: 'initializing' : cannot convert from 'int (*)[1]' to 'int'
This conversion requires a reinterpret_cast, a C-style cast or function-style cast
SuperString.cpp(71) : error C2109: subscript requires array or pointer type
Run Code Online (Sandbox Code Playgroud)
谢谢!
Ara*_*raK 25
以下是使用各种技术在C++中构建二维数组的摘要.
const size_t N = 25; // the dimension of the matrix
int matrix[N][N]; // N must be known at compile-time.
// you can't change the size of N afterwards
for(size_t i = 0; i < N; ++i)
{
for(size_t j = 0; j < N; ++j)
{
matrix[i][j] = /* random value! */;
}
}
Run Code Online (Sandbox Code Playgroud)
const size_t N = 25; // the dimension of the matrix
int** matrix = new int*[N]; // each element is a pointer to an array.
for(size_t i = 0; i < N; ++i)
matrix[i] = new int[N]; // build rows
for(size_t i = 0; i < N; ++i)
{
for(size_t j = 0; j < N; ++j)
{
matrix[i][j] = /* random value! */;
}
}
// DON'T FORGET TO DELETE THE MATRIX!
for(size_t i = 0; i < N; ++i)
delete matrix[i];
delete matrix;
Run Code Online (Sandbox Code Playgroud)
// Note: This has some additional overhead
// This overhead would be eliminated once C++0x becomes main-stream ;)
// I am talking about r-value references specifically.
typedef vector< vector<int> > Matrix;
typedef vector<int> Row;
const size_t N = 25; // the dimension of the matrix
Matrix matrix;
for(size_t i = 0; i < N; ++i)
{
Row row(N);
for(size_t j = 0; j < N; ++j)
{
row[j] = /* random value! */;
}
matrix.push_back(row); // push each row after you fill it
}
// Once you fill the matrix, you can use it like native arrays
for(size_t i = 0; i < N; ++i)
{
for(size_t j = 0; j < N; ++j)
{
cout << matrix[i][j] << " ";
}
cout << endl;
}
Run Code Online (Sandbox Code Playgroud)
// Note that this is much more efficient than using std::vector!
int
main () {
// Create a 3D array that is 3 x 4 x 2
typedef boost::multi_array<double, 3> array_type;
typedef array_type::index index;
array_type A(boost::extents[3][4][2]);
// Assign values to the elements
int values = 0;
for(index i = 0; i != 3; ++i)
for(index j = 0; j != 4; ++j)
for(index k = 0; k != 2; ++k)
A[i][j][k] = values++;
// Verify values
int verify = 0;
for(index i = 0; i != 3; ++i)
for(index j = 0; j != 4; ++j)
for(index k = 0; k != 2; ++k)
assert(A[i][j][k] == verify++);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
您需要将矩阵 var 声明为int* matrix,因为动态数组被声明为指针。但是你不能在一个新的二维数组中创建两个维度都是可变的。您可以创建一维数组并自行进行索引数学计算。
int* matrix = new int[x*y];
// Set element x1,y1 to 5
matrix[x1+y1*x] = 5;
| 归档时间: |
|
| 查看次数: |
25522 次 |
| 最近记录: |