我试图做这样的事情:
#include <vector>
#include <algorithm>
int main()
{
int l[] = {1,2,3,4};
vector<int> vi(4);
copy(l, l+4, vi.begin());
do_stuff();
}
Run Code Online (Sandbox Code Playgroud)
上面的代码可以编译和运行,没有任何错误.然后我改成了这个:
int main()
{
int l[] = {1,2,3,4};
vector<int> vi;
vi.reserve(4); //different from the above code
copy(l, l+4, vi.begin());
do_stuff();
}
Run Code Online (Sandbox Code Playgroud)
根据代码,我改变vector<int> vi(4);了vector<int> vi; vi.reserve(4);,但问题出现了,也就是说,更改的代码可以编译,但运行时会发生seg-fault.
据此gdb,seg-fault发生在功能上do_stuff();.
这是为什么?我做出的改变是否重要?我不能reserve在这里用吗?
该reserve()方法仅分配内存,但保留未初始化.它只影响capacity(),但size()不会改变.
如果要创建任意数量的实例,则应使用resize()分配内存的实例,并创建与传递给的参数一样多的实例resize().
| 归档时间: |
|
| 查看次数: |
372 次 |
| 最近记录: |