在用new声明的向量中赋值元素.C++

Joh*_*nny 1 c++ vector new-operator dynamic-memory-allocation

我试图使用一个大的2D矢量,我想用新的分配(因为它很大).

如果我说:

vector< vector<int> > bob;
bob = vector< vector<int> >(16, vector<int>(1<<12,0));
bob[5][5] = 777;
Run Code Online (Sandbox Code Playgroud)

有用.但如果我说:

std::vector< std::vector<int> > *mary;
mary = new vector< vector<int> >(16, vector<int>(1<<12, 0));
mary[5][5] = 777;
Run Code Online (Sandbox Code Playgroud)

它不起作用,我收到错误:

错误1错误C2679:二进制'=':找不到哪个操作符采用'int'类型的右操作数(或者没有可接受的转换)c:\ Users\jsparger\Documents\My Dropbox\ARI\VME_0.01\VME_0.01\V965.cpp 11 VME_0.01

显然我是C++的新手.有人可以解释我需要使用什么语法来执行此操作.玛丽是一个指针,所以我可以看出为什么这不起作用,但是*mary [5] [5] =因为"新"而不允许的任何东西,对吧?

谢谢您的帮助.这个载体就是我现在要用的东西,因为它似乎很容易让我的小c ++大脑理解,但是如果像这样的大型载体是一个坏主意等,请随时告诉我.

谢谢一堆.

编辑:我错误地认为"因为新的而不允许".我不知道我在哪里误读了它,因为它显然有效,并且不会因为它不太有意义.谢谢.

Jam*_*lis 6

如果mary是指针,那么在应用下标运算符之前必须取消引用它:

(*mary)[5][5] = 777;
Run Code Online (Sandbox Code Playgroud)

括号是必需的,因为下标的优先级高于取消引用.


fre*_*low 6

无论如何,Vectors将它们的元素存储在堆上.在堆上分配矢量对象本身没有意义,因为它非常小(在32位机器上通常为12个字节).