作者wtchen (没有存在感的人)
看板C_and_CPP
标题Re: [问题] 用指标指向vector的element?
时间Sun Jun 19 03:06:29 2016
这篇文是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];
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 86.209.24.41
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1466276791.A.294.html
※ 编辑: wtchen (86.209.24.41), 06/19/2016 03:08:36
1F:推 fatrabitree: Vector 是连续空间阿 06/19 03:40
2F:推 fatrabitree: New也是连续空间,这都不算c++11的新特性 06/19 03:49
3F:→ wtchen: 所以我可以用指标指到vector里面的element? 06/19 04:17
4F:推 CoNsTaR: 可以啊 只是新增元素之後原来的指标就可能失效 06/19 05:59
5F:推 FRAXIS: 你应该只需要 index 而不需要真的指标吧 06/19 07:02
6F:推 steve1012: 应该不需要用Pointer 06/19 07:59
8F:→ Caesar08: The elements are stored contiguously,... since C++03 06/19 10:28
9F:→ wtchen: 是我被pointer宠坏了....感谢 06/20 15:10