如何将值赋值到二维向量中,如二维数组
how to assign values into a 2D vector like a 2D array
有办法吗?目前我这样使用:
for( i=0;i<PU_number;i++)
{
for( j=0;j<=time_slots;j++)
myMatrix.tempVec.push_back(0.0);
myMatrix.value.push_back(myMatrix.tempVec);
myMatrix.tempVec.clear();
}
但是,它对我没有用。有时我需要更改此向量中的特定地址。喜欢 myMatrix.tempVec[1][4]
。当我这样做时:
myMatrix.value[i][j]=value;
它破坏了内存,我得到了 SIGABRT
、SIGSESV
和很多类似的东西。当我这样做时,valgrind 也会发疯。但是我需要一个合适的方法来做到这一点。
编辑:我按照你们说的做了:
myMatrix.value.resize(PU_number);
for( i=0;i<PU_number;i++)
myMatrix.value[i].resize(time_slots);
然后:
for( i=0;i<PU_number;i++)
{
for( j=0;j<time_slots;j++)
{
for( k=0;k<number_of_packets;k++)
{
double r=((double) rand() / (RAND_MAX));
for( x=myMatrix.mat[i][k];x<=myMatrix.mat[i][k]+myMatrix.len[i][k];x++)
myMatrix.value[i][x]=r;
}
}
}
然后我在 valgrind 中再次得到 "Invalid write of size 8"。
有一个 std::vector::resize()
函数,可用于在通过索引访问任何值之前正确设置 矩阵 的维度。
这是一个小样本
myMatrix.resize(PU_number);
for( i=0;i<PU_number;i++) {
myMatrix[i].resize(time_slots);
for( j=0;j<=time_slots;j++)
myMatrix[i][j] = 0.0;
}
您可以使用 std::vector >
喜欢这里:
#include <vector>
#include <iostream>
int main()
{
std::vector<std::vector<int> > vec;
vec.resize(10);
for (unsigned int i = 0 ; i < vec.size(); ++i)
{
vec[i].resize(10);
}
vec[1][4] = 3;
vec[1].push_back(5)
std::cout << "vec[1][4] = " << vec[1][4] << std::endl;
std::cout << "vec[1][10] = " << vec[1][10] << std::endl;
return (0);
}
我创建了一个大小为 10 的向量,其中包含其他大小为 10 的向量;
请注意,您必须使用 resize 来获得带有 std::vector 的尺寸 > 但如果您想添加尺寸,您可以使用 vec[i].push_back(5);
有办法吗?目前我这样使用:
for( i=0;i<PU_number;i++)
{
for( j=0;j<=time_slots;j++)
myMatrix.tempVec.push_back(0.0);
myMatrix.value.push_back(myMatrix.tempVec);
myMatrix.tempVec.clear();
}
但是,它对我没有用。有时我需要更改此向量中的特定地址。喜欢 myMatrix.tempVec[1][4]
。当我这样做时:
myMatrix.value[i][j]=value;
它破坏了内存,我得到了 SIGABRT
、SIGSESV
和很多类似的东西。当我这样做时,valgrind 也会发疯。但是我需要一个合适的方法来做到这一点。
编辑:我按照你们说的做了:
myMatrix.value.resize(PU_number);
for( i=0;i<PU_number;i++)
myMatrix.value[i].resize(time_slots);
然后:
for( i=0;i<PU_number;i++)
{
for( j=0;j<time_slots;j++)
{
for( k=0;k<number_of_packets;k++)
{
double r=((double) rand() / (RAND_MAX));
for( x=myMatrix.mat[i][k];x<=myMatrix.mat[i][k]+myMatrix.len[i][k];x++)
myMatrix.value[i][x]=r;
}
}
}
然后我在 valgrind 中再次得到 "Invalid write of size 8"。
有一个 std::vector::resize()
函数,可用于在通过索引访问任何值之前正确设置 矩阵 的维度。
这是一个小样本
myMatrix.resize(PU_number);
for( i=0;i<PU_number;i++) {
myMatrix[i].resize(time_slots);
for( j=0;j<=time_slots;j++)
myMatrix[i][j] = 0.0;
}
您可以使用 std::vector > 喜欢这里:
#include <vector>
#include <iostream>
int main()
{
std::vector<std::vector<int> > vec;
vec.resize(10);
for (unsigned int i = 0 ; i < vec.size(); ++i)
{
vec[i].resize(10);
}
vec[1][4] = 3;
vec[1].push_back(5)
std::cout << "vec[1][4] = " << vec[1][4] << std::endl;
std::cout << "vec[1][10] = " << vec[1][10] << std::endl;
return (0);
}
我创建了一个大小为 10 的向量,其中包含其他大小为 10 的向量; 请注意,您必须使用 resize 来获得带有 std::vector 的尺寸 > 但如果您想添加尺寸,您可以使用 vec[i].push_back(5);