为什么我看到矢量的大小为零
Why do I see size of vector as zero?
void pre_process(string& pattern, vector<int>& c)
{
c.reserve(pattern.length());
c[0] = -1;
c[1] = 0;
for(int i=2; i<pattern.length(); ++i)
{
if(pattern[c[i-1]] == pattern[i-1])
c[i] = c[i-1]+1;
else
c[i] = 0;
}
cout << c.size() << endl; //why the size is zero here?
}
在向量中保留空间后,我将值分配给向量的不同位置。那么不应该增加尺寸吗?
使用矢量作为固定长度容器的正确方法是什么?
因为std::vector::reserve
不会调整向量的大小。它只是为矢量的数据重新分配更大的内存块(并在必要时从原始数据复制元素)。
为此,您需要std::vector::resize
:
c.resize(pattern.length());
目前,您正在越界访问c
。
或者,您可以保留调用以调整大小并使用push_back而不是operator[]
c.reserve(pattern.length());
c.push_back(-1);
c.push_back(0);
相关文章:
- 有人能为我解释一下C++代码吗
- 在c++中为我自己的基于指针的数组分配内存的正确方法
- 为我的 c++ 类介绍制作一个三角形分类器.我有几个问题
- 请解释字谜的代码,我看不懂计数器数组,每个值已经是0
- 如何使用C++为我的容器 Deque 设置最大大小?
- 在为我的基于文本的 RPG 游戏制作库存时遇到困难
- 如何为我的数组选择更大的数据类型?
- 所以我正在为我的学校作业练习继承,但我无法正确实施标题保护
- 如何为我的类实现/重载二进制运算符
- 如何为我的容器实现随机访问迭代器?
- 如何使用我构建的库,而不会从源代码出错,但不为我自己的项目编译?
- 如何为我的游戏设置主菜单场景?QT C++
- 如何查看在程序级别为我的程序创建了多少 vtable 和 vpointer
- 如果我想使用 cout 为我的函数提供任何输入......我该如何给出
- 为什么我看不到字符串?
- 我看过Stellarium代码,我不知道它从哪里开始
- 如何从支持linux/mac操作系统的第三方代码为我的c#项目创建dll
- 即使在我为我的应用程序授予管理员后也无法从 Windows 系统复制目录
- 如果您有Visual Studio 2017 Preview 2更新,您可以为我提供include/iosfwd文件吗?
- 写一个最小的自定义操作员:std :: Sort需要std :: __ lg为我的类型解释