Re: [问题] 用指标指向vector的element?

楼主: wtchen (没有存在感的人)   2016-06-19 03:06:29
这篇文是2010年发的,因为最近遇到相似的问题想来请教。
我正在练习merge sort,用C很好写,原始码在此:
https://gist.github.com/gnitnaw/6ab90fbad5b2c07cb28fbe4b42ae3306
用divide & conquer的步骤是这样:
array size >=3的话,拆两半,这个用pointer很简单,
就把它变成两个pointer,一个摆array[0],另一个摆array[N/2]。
可是如果用C++改写就不一样了。
由于array size很大,如果用vector,由于它可能不是连续空间,
我不能用pointer或reference把vector分成两半。
就变成只能用copy vector的方式(那我得copy log_2(100000)次....)
还是我能用new一个size = 100000的array?
不知道C++的array是不是连续空间?可不可以用pointer指向该array中的某元素?
对C++11以后仍然不是很熟,还在练习中(汗),请多指教。
PS: 我知道C++还是可以用C的语法,不过我想尽可能用C++11以后的语法。
※ 引述《zxvc (执著)》之铭言:
: 我想让"指标""一直"指向某个vector的元素,
: 请问有无可能。
: 事实上这在VC是不行的。
: 我知道vector可能发生reallocate memory的情形。
: 所以就算某个指标某个时候指向vector的一个element,
: 一旦有reallocate的情形(如某次push_back),
: 就不再保证指向同一个element。例如以下code在VC会出现执行时期错误:
: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
: #include<iostream>
: #include<vector>
: int main()
: {
: vector<int> v;
: v.push_back(0);
: int *p = &(*(v.begin()));
: v.push_back(1);
: cout<<*p; // error!
: }
: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
: #include<iostream>
: #include<vector>
: int main()
: {
: vector<int> v;
: v.push_back(0);
: vector<int>::iterator p = v.begin();
: v.push_back(1);
: cout<<*p; // error!
: }
: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
: 甚至不用指标,改用iterator,也一样会出问题。
: 所以请问除了指标、iterator,难道只剩index可以一直指向vector同一个element吗?
: index的用法如:
: int p = 0;
: cout<<v[p];
作者: fatrabitree (胖兔子)   2016-06-19 03:40:00
Vector 是连续空间阿New也是连续空间,这都不算c++11的新特性
楼主: wtchen (没有存在感的人)   2016-06-19 04:17:00
所以我可以用指标指到vector里面的element?
作者: CoNsTaR ((const *))   2016-06-19 05:59:00
可以啊 只是新增元素之后原来的指标就可能失效
作者: FRAXIS (喔喔)   2016-06-19 07:02:00
你应该只需要 index 而不需要真的指标吧
作者: steve1012 (steve)   2016-06-19 07:59:00
应该不需要用Pointer
作者: weiclin (CC)   2016-06-19 09:16:00
作者: Caesar08 (Caesar)   2016-06-19 10:28:00
The elements are stored contiguously,... since C++03
楼主: wtchen (没有存在感的人)   2016-06-20 15:10:00
是我被pointer宠坏了....感谢

Links booklink

Contact Us: admin [ a t ] ucptt.com