如何在每次循环迭代期间生成向量,存储数据,然后删除该向量?
How do I generate a vector during each iteration of loop, store data, and then delete that vector?
我正在尝试在我的程序中创建一个向量向量。我希望有一个双循环;内部循环检查某个条件,如果满足该条件,则在我的向量中存储一个值。一旦内部循环运行,该"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
应按预期工作。
- 访问存储在向量C++中的结构的多态成员
- 添加存储在向量中的大整数的函数出现问题
- 在 std::无符号字符的向量处存储 int 的十六进制表示形式
- 如何从用户那里获取输入并将其存储在向量中?
- 如何从文件中读取两个字符串和数字数组,并将它们存储在对象向量中
- 将无符号字符的向量存储在数组中会给我 std::bad_alloc
- 在二维向量或数组中可以存储的最大元素数是多少?
- 存储在堆分配向量中的指针的免费存储
- 将相同共享指针的副本存储在不同的向量中是否是一种好的做法?
- 将数组信息存储到 c++ 向量中有一个"Access violation reading location"
- Sqlite3:将数据库表名存储在向量中
- 如何在数组和向量 c++ 中存储和保存输入
- C++ 将抽象类型的动态分配对象传递给函数并存储在向量中
- 代码将向量存储为向量<vector>,为什么没有错误消息?
- 替代STD ::向量存储参考而不是对象的副本
- 将向量存储在<file> CStringArray 中?
- 将可变大小结构的向量存储在c++中的二进制文件中
- 使用向量c++存储和洗牌一副牌
- 将指针向量存储在文件中并再次读取它们
- 是否可以/建议将向量存储在结构中?C++