我希望将 push_back 窗口转换为矢量哈希1,但是在第一次执行矢量大小为1并且元素值很好之后这样做,但是在第二次执行之后甚至在执行之前 hashes1.push_back(window);
此语句大小仍为1,但元素值已被新窗口值替换,并且在第二次执行{{1}后}向量大小为2,两个元素与最后一个元素相同( window 中的新值)。有人可以帮我吗?
hashes1.push_back(window);
答案 0 :(得分:3)
我认为window
是指向char[]
的{{1}}或char*
。
首先,push_back char[]
是指向数组第一个元素的指针。然后第二次执行内部循环,window
- 第一个元素 - 再次设置,window[0]
仍然指向该元素。
答案 1 :(得分:2)
这是因为您正在将对同一地址的引用推送到向量上,然后只更改存储在该地址的值。
for(int i=0; i<WS; i++) window[i] = buffer[windowStart+i];
该行将存储在数组中每个地址的值设置为buffer [windowStart + i]。
hashes1.push_back(window);
然后该行将指向该字符的指针推送到向量上。因此,基本上在循环的每次迭代中,您将相同的值(指针指向的地址)推送到向量上并更改存储在该地址的值。