C++ 为什么我的多维向量只向后推0索引?
我在使用C++ 为什么我的多维向量只向后推0索引?,c++,vector,push-back,C++,Vector,Push Back,我在使用push_back()时遇到问题,我不明白为什么只有第一个cols向量被反复推 输入 10931008710739105987-188370926106839118877-11010101001001001000-1完成 C++ (...) size = numbers.size(); counter = 0; square = ceil(sqrt(size)); vector < vector <int> > rows; vector<int>
push_back()
时遇到问题,我不明白为什么只有第一个cols
向量被反复推
输入10931008710739105987-188370926106839118877-11010101001001001000-1完成
C++
(...)
size = numbers.size();
counter = 0;
square = ceil(sqrt(size));
vector < vector <int> > rows;
vector<int> cols;
do {
for (int i = 0; i < square; ++i) {
cols.push_back(numbers[counter]);
cout << cols[i] << " ";
++counter;
}
rows.push_back(cols);
cout << endl;
} while (counter <= size);
(...)
行[1][2]
应该是73
,而不是9
。我哪里出错了?您从未重置过cols
。相反,你只是不断地增加它。我认为您正在使用幻数索引打印行
,这就是为什么您没有发现添加的部分。在循环中声明一个临时的cols
,或者在每次push_back()
之后调用clear
,我发现了您的主要问题。但是你的代码也有其他问题
缓冲区溢出。例如,如果size==4
那么square==2
我们得到:
- 在iter#1之后:计数器==
;继续从2号开始啊,好建议。我使用了2
,它很有效,但是为什么向量的内容不能像其他变量一样被重写呢这意味着它增加了cols.clear()
并增加了它的大小。因此,向量的新添加永远不会复制到父向量中,因为它们超过了向量
平方(
,在这种情况下)?它们确实如此。你可能只是没有把它们打印出来。7
0: 10 9 10 3 100 8 7 1: 10 9 10 3 100 8 7 2: 10 9 10 3 100 8 7 3: 10 9 10 3 100 8 7 4: 10 9 10 3 100 8 7 5: 10 9 10 3 100 8 7 6: 10 9 10 3 100 8 7
while (counter + square <= size);
for (size_t counter = 0; counter + square <= size; counter += square ) { std::vector<int> cols( numbers.begin() + counter, numbers.begin() + counter + square ); rows.push_back(cols); }