2013-03-19 64 views
0

我在C++中做这个程序。 我想建立一个随机行和3列的表。当我编译没有错误,但我执行该程序什么都不做,什么都不写。你能帮我找到我的错误吗?多维动态内存向量C++

感谢

int main(){ 
srand(time(0)); 
int project = (rand() % 5) + 1 ; 
std::cout << "The Number is " << project << "." << std::endl; 

vector<vector<int> > P(project, vector<int>(3)); 

for(int i = 0; i <= P.size(); ++i){ 
    for(int j = 0;j <= P[i].size();++j){ 
     P[i][j] = (rand() % 50)+10; 
     P[i][j] = (rand() % 2)+1; 
     P[i][j] = (rand() % 50)+1; 
    } 
} 

for(int a = 0;a <= P.size();++a){   
    for(int j = 0;j <= P[a].size();++j){ 
     std::cout << "Project "<< a <<" :"<< P[a][j] ; 
     std::cout << P[a][j] <<" , "; 
     std::cout << P[a][j] <<" ."<< std::endl; 
} 
} 

我把它写入所有列的值相同的另一个问题。所以我需要改变我的循环中的东西吗?

+0

当您在调试器中逐步执行程序时会发生什么? – Johnsyweb 2013-03-19 04:05:12

回答

1

有几个问题,您应该使用size_t代替int,并且您正在循环中通过一个循环。例如,它应该是i < P.size()代替i <= P.size()

for(size_t i = 0; i < P.size(); ++i) 
{ 
    for(size_t j = 0;j < P[i].size();++j) 
    { 
    P[i][j] = (rand() % 50)+10; 
    P[i][j] = (rand() % 2)+1; 
    P[i][j] = (rand() % 50)+1; 
    } 
} 

另外,你的意思是写同一个入口,三次,又有什么用的目的是什么?此外,您还输出相同的条目三次。我修改为仅输出一次:

for(size_t a = 0;a < P.size();++a) 
{   
for(size_t j = 0;j < P[a].size();++j) 
{ 
    std::cout << "Project "<< a <<" :"<< P[a][j] << std::endl; 
} 
} 

此外,如果你是在你的代码,我会建议反对using namespace std。明确使用std::vector

+0

这在大多数情况下并不是非常重要,但也许你还想指出,应该使用MAX_RANGE来确保你的随机数字是均匀分布的,现在你的分布有轻微偏斜 – 4pie0 2013-03-19 02:57:16

+0

现在感谢你的出现。但我有问题,它写所有的时间3次像000111222一样的东西... – usertfwr 2013-03-19 02:58:06

+0

size_t只是一个typedef int(无符号) – TravellingGeek 2013-03-19 03:00:40