作者:
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:001.你應該誤會vector怎麼用了吧,我猜你要的只是vector<int> v(5),不需要用new的2. vector底層實作基本上就是array,能夠O(1) push_back原因則是他會自動在底層陣列滿的時候自動再重新把陣列變大,但這樣做複雜度均攤下來還是好的(無關的部分:可以問用圖存set該怎麼做嗎?
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正解
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當然是合法的操作
這...應該用個v.resize()就解決了吧...