[问题] vector 使用问题

楼主: NTUmaki (西木野真姬)   2020-09-07 12:34:59
开发平台(Platform): (Ex: Win10, Linux, ...)
mac
编译器(Ex: GCC, clang, VC++...)+目标环境(跟开发平台不同的话需列出)
c17
额外使用到的函数库(Library Used): (Ex: OpenGL, ...)
null
问题(Question):
想要 new vector<int>() 之后 access vector
喂入的资料(Input):
null
预期的正确结果(Expected Output):
1
错误结果(Wrong Output):
没有运算子 "=" 符合这些算子
作者: oToToT (屁孩)   2020-09-07 13:01:00
1.你应该误会vector怎么用了吧,我猜你要的只是vector<int> v(5),不需要用new的2. vector底层实作基本上就是array,能够O(1) push_back原因则是他会自动在底层阵列满的时候自动再重新把阵列变大,但这样做复杂度均摊下来还是好的(无关的部分:可以问用图存set该怎么做吗?
作者: james732 (好人超)   2020-09-07 14:10:00
https://bit.ly/35gCesP 看看这篇有没有帮助?你需要的可能是先预留空间?
作者: steve1012 (steve)   2020-09-07 15:09:00
v是pointer to vector. 并没有告诉你会直接指到underlying data.
作者: moebear (萌熊)   2020-09-07 15:12:00
直接改写的话 你得用(*v)[2]=1;
作者: descent (“雄辩是银,沉默是金”)   2020-09-07 15:24:00
你需要 "C++ 标准库", 买一本来参考书上用了 11 页在说明 vector, 应该可以解除你的疑惑你如果是要理解内部实作, 那要找 "stl 源码剖析" 这本书
作者: kaneson (Lance)   2020-09-07 15:54:00
楼上 *v正解
作者: a58524andy (a58524andy)   2020-09-07 16:41:00
disjoint set没ordering吧(? 可是associative containners的iterator traversal要参照其key的ordering加上标准也有指定一些复杂度限制可能是因为这样所以常见的都用rb-tree
作者: kaneson (Lance)   2020-09-07 16:56:00
v本身是pointer, 不能把它当vector去access, c的pointer可以操作 v[2] 只是语法糖,不适用vector, (*v)[2] 或 v->at(2) 才正确
作者: oToToT (屁孩)   2020-09-07 22:03:00
说实在我还是不知道要怎么用disjoint set当作set,是我误会了什么吗@@,应该说这两者根本没关吧,而且disjoint set其实也是棵树我觉得正确的说法应该是v[??]后的type是vector<int>,所以你让他=2是完全没有道理的,普通的阵列int *a; a[?]的type是int,那这时候=2当然是合法的操作
作者: smartclever (超音速の骑士)   2020-09-11 17:51:00
这...应该用个v.resize()就解决了吧...

Links booklink

Contact Us: admin [ a t ] ucptt.com