我正在尝试为矢量矢量分配空间但在分配gdb后显示pVectorTemp_
中的空格但显示大小为2
#include <iostream>
#include<vector>
using namespace std;
int main( )
{
int index1 = 2;
int index2 = 2;
vector<vector<float>*>* pVectorTemp_ = NULL;
pVectorTemp_ = new vector<vector<float>*>();
pVectorTemp_->resize(index1);
for(unsigned int i=0 ;i< index1;i++)
{
vector<float>* pvecTemp = new vector<float>();
pvecTemp->resize(index2);
(*pVectorTemp_)[index1] = (pvecTemp);
}
return 0;
}
gdb:
(gdb) pvector pVectorTemp_
elem[0]: $2 = (std::vector<float, std::allocator<float> > *) 0x0
elem[1]: $3 = (std::vector<float, std::allocator<float> > *) 0x0
Vector size = 2
Vector capacity = 2
所以我做错了吗?
答案 0 :(得分:3)
在for
循环体内,你有:
(*pVectorTemp_)[index1] = (pvecTemp);
但请注意,for
循环的索引为 i
(index1
是上限)。
所以,我认为你有一个拼写错误或错误,你可能想在i
内使用index1
(不是[...]
)作为索引。
另请注意,您有signed
/ unsigned
不匹配,因为在循环中您将unsigned int
作为索引,并将其与index1
进行比较,这是一个有符号整数。
但是,无论如何,你的代码是无用的复杂。
您不需要使用new
在堆上分配所有这些向量
只需使用自动(&#34; stack&#34; )分配,例如:
int main()
{
int index1 = 2;
int index2 = 2;
// Your original code is commented out:
//
// vector<vector<float>*>* pVectorTemp_ = NULL;
// pVectorTemp_ = new vector<vector<float>*>();
vector<vector<float>> vectorTemp;
// pVectorTemp_->resize(index1);
// Just consider calling push_back.
for (int i = 0; i < index1; i++)
{
// vector<float>* pvecTemp = new vector<float>();
// pvecTemp->resize(index2);
// (*pVectorTemp_)[index1] = (pvecTemp);
vectorTemp.push_back(vector<float>(index2));
}
// No need for return 0 in main().
// return 0;
}
了解代码如何简化!
(没有评论的代码如下。)
int main()
{
int index1 = 2;
int index2 = 2;
vector<vector<float>> vectorTemp;
for (int i = 0; i < index1; i++)
{
vectorTemp.push_back(vector<float>(index2));
}
}
作为进一步的改进,假设您的C ++ STL实现提供了这一点,您可能希望使用 emplace_back()
而不是push_back()
来构建嵌套向量:
// Instead of vectorTemp.push_back(vector<float>(index2));
//
vectorTemp.emplace_back(index2);
在这种情况下,vector
大小index2
会直接构建到vectorTemp
(&#34;外部&#34;向量)容器中,而不会产生临时值。
您可能还需要阅读StackOverflow上的this thread以获取更多详细信息:
答案 1 :(得分:1)
这些是我能找到的东西。
vector<vector<float>*>* pVectorTemp1 = new vector<vector<float>*>(); // (1)(4)
pVectorTemp1->resize(index1);
for (int i=0 ; i < index1; i++) { // (2)
vector<float>* pvecTemp2 = new vector<float>(); /(4)
pvecTemp2->resize(index2);
(*pVectorTemp1)[i] = (pvecTemp2); // (3)
}
unsigned
除了签名/未签名错误的风险外,什么都不添加i
而不是index1
。答案 2 :(得分:1)
更改
(*pVectorTemp_)[index1] = (pvecTemp);
与
(*pVectorTemp_)[i] = (pvecTemp);
答案 3 :(得分:1)
所以我做错了吗?
是的,你做错了什么:
这是一个简化版本:
int main( )
{
int index1 = 2;
int index2 = 2;
std::vector<std::vector<float>> pVectorTemp_
( index1
, std::vector<float>(index2) );
}