我已经制作了一个winform应用程序,我使用
使用了array [n] [n]类型的向量typedef char myarray[9][9];
typedef vector<myarray> array3d;
据我所知,此功能在c ++ 0x中提供。我使用visual studio 2010终极版是xmemory中的错误,因为这个? ide显示没有其他错误(甚至没有上面的代码)
'Target of operator new()' : array initialization needs curly braces
指向xmemory中的这段代码
void construct(pointer _Ptr, _Ty&& _Val)
{ // construct object at _Ptr with value _Val
::new ((void _FARQ *)_Ptr) _Ty(_STD forward<_Ty>(_Val));
}
在超过2.5 k行的代码中,我如何找到问题所在?
编辑:
由于向量中的问题似乎是我用向量
进行的所有操作#include <vector>
#include <string>
#include <algorithm>
using namespace std;
typedef char myarray[9][9];
typedef string string_array[9][9];
void function2(vector<string_array>*my_3d_string_array, int d)
{
string::iterator it;
int j,cl;
it=find((*my_3d_string_array)[d][j][cl].begin(),(*my_3d_string_array)[d][j][cl].end(),3);
(*my_3d_string_array)[d][2][3].erase(it);
}
void function(vector<string_array>*my_3d_string_array, int d)
{
(*my_3d_string_array)[d][3][4] = 2;
function2(my_3d_string_array,d);
}
int main()
{
myarray matrix;
string_array string_matrix;
std::vector<myarray> my_3d_array;
std::vector<string_array> my_3d_string_array;
// fill_matrix(matrix);
// fill_string_matrix(string_matrix)
int d;
function(&my_3d_string_array, d); // passing pointer to vector to a function d is the 3rd dimention
my_3d_array.push_back(matrix);
my_3d_string_array.push_back(string_matrix);
}
我在这里犯了一个愚蠢的错误吗?
答案 0 :(得分:7)
不支持数组类型作为容器中的元素。
可能的解决方法是使用std::array<>
代替char[]
#include <vector>
#include <array>
typedef std::array<std::array<char,4>, 6> array;
typedef std::vector<array> _3darray;
int main()
{
_3darray a, b;
a = b;
}
答案 1 :(得分:0)
因为模板类型在编译时被实例化,所以即使使用C ++ 0x,也不可能在模板参数中参与(甚至间接)运行时变量。
但是,您可能对boost multidimensional array library感兴趣,可以使用它来轻松声明3d数组。以下是文档中的示例:
#include "boost/multi_array.hpp"
#include <cassert>
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;
}