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);
    }