如何在每次循环迭代期间生成向量,存储数据,然后删除该向量?

How do I generate a vector during each iteration of loop, store data, and then delete that vector?

本文关键字:向量 存储 数据 然后 删除 循环 迭代      更新时间:2023-10-16

我正在尝试在我的程序中创建一个向量向量。我希望有一个双循环;内部循环检查某个条件,如果满足该条件,则在我的向量中存储一个值。一旦内部循环运行,该"temp"向量就会存储在主向量中。我的想法是清除我的"temp"(内部)向量,但vector.clear()也删除了我的主向量中的所有内容。这是我的矢量代码:

vector <int> vectortestInner;
vector <vector<int> > vectortestOuter(10);

我在这里填充我的向量:

void vectorTest()
{
for (int i=0; i<vectortestOuter.size(); i++)
{           
for (int j=0; j<vectortestOuter.size(); j++)
{
vectortestInner.push_back(j);
}
vectortestOuter[i]=vectortestInner;
//vectortestInner.clear();
}   
}

并尝试像这样打印内容:

for(int i=0; i<vectortestOuter.size(); i++)
{
for (int j=0; j<vectortestInner.size(); i++)
{
cout<<vectortestInner[j]<<endl;
}
}

到目前为止,它似乎正在打印 0(当我希望它打印 1-10 时),如果我调用 clear();,它只会输出空行。

我做错了什么,我怎样才能实现我想要做的事情?谢谢!

填充(或重新填充,因为这是您的第一个函数可以完成的

// remove any global declaration of vectortestInner since we won't use it
void vectorTest()
{
for (int i=0; i<vectortestOuter.size(); i++)
{   
std::vector<int> vectortestInner;
vectortestInner.reserve(vectortestOuter.size());         
for (int j=0; j<vectortestOuter.size(); j++)
{
vectortestInner.push_back(j);
}
vectortestOuter[i]=vectortestInner;
// vectortestInner ceases to exist here
}   
}

这会在外部循环的每次迭代中本地构造vectorTestInner,因此它也将在迭代结束时被销毁。reserve()调用避免了多次调整大小(但特定于内部循环总共要附加vectortestOuter.size()元素的事实)。

是的,这每次都会重建vectortestInner。 但这实际上并不比每次清理和重新填充更糟糕(因为这些是在建设和破坏中完成的最重要的操作)。

要打印矢量矢量的元素,您实际上需要引用它们。 您的代码有一个缺陷,即(以某种方式)您假设vectorTestInner神奇地提供了一种访问vectorTestOuter元素的方法。 事实并非如此。

for(int i=0; i<vectortestOuter.size(); i++)
{
for (int j=0; j<vectortestOuter[i].size(); j++)      // also using j++ here, not i++
{
cout<<vectortestOuter[i][j]<<endl;
}
}

您的代码中还有其他我尚未解决的低效率问题。 与其使用[]不如考虑使用迭代器。 我将把它作为一个练习。

您正在内部循环中打印临时向量 (vectortestInner),而不是包含在主向量 (vectortestOuter[i]中的向量)。

for(int i=0; i<vectortestOuter.size(); i++)
{
for (int j=0; j<vectortestOuter[i].size(); j++)
{
cout<<vectortestOuter[i][j]<<endl;
}
}

更改打印功能后,清除vectortestInner应按预期工作。