2011-04-13 76 views
0

我创建了一个名为select_p的地图,此地图的矢量称为pts。我已经将数据存储在一个数组中,并且我想将这些数据插入到我的地图矢量中。我试图通过插入数组的值到新的向量,然后推回到我的地图。但它不工作,请帮我纠正这些代码?感谢从矢量到矢量的回推数据

#include<iostream> 
#include<cstdlib> 
#include <map> 
#include <vector> 

using namespace std; 
int main() 
{ 
    int M=7; 
    int N=6; 
    int i=0; 
    int * temp; 
    map<int,vector<int> > select_p; 
    vector<int>pts; 

    for (int m=0; m<M; m++) 
    { 
     for (int n=0; n<N; n++) 
     { 
      vector<int>id; 
      if (n==0 && m==5) 
      { 
       temp = new int[3,i+N,i+N+1,i+1]; 
       unsigned ArraySize = sizeof(temp)/sizeof(int); 
       id.insert(id.begin(),temp[0], temp[ArraySize]); 
       select_p[i].push_back(id); 
      } 
      i++; 
     } 
    } 
    delete[] temp; 

    system("PAUSE"); 
    return 0; 
} 
+6

请确保您有[一本好的介绍性C++书](http://stackoverflow.com/questions/388242/the-definitive-c++-book-guide-and-list)。你认为'new int [3,i + N,i + N + 1,i + 1]'具体是什么?你为什么要使用原始的动态分配数组? – 2011-04-13 01:31:01

+0

我想插入数据的整个数据数据到地图的矢量中,而不使用for循环。是否有可能将数据集推回到地图的矢量中? – aki 2011-04-13 01:38:36

回答

5
for (int m=0; m<M; m++) { 
    for (int n=0; n<N; n++) { 
     if (n==0 && m==5) { 

你为什么要循环时,你实际上只为一对的mn值做什么?这里的循环完全没用。您只需设置n = 0m = 5即可获得相同效果。

无论你认为这是什么,那不是它所做的。这相当于temp = new int[i+1];[]里面的其余表达式没有效果。

也就是说,你不应该使用new在你的程序中创建数组。使用std::vector;正确使用要容易得多。

unsigned ArraySize = sizeof(temp)/sizeof(int); 

这是行不通的。当你动态地分配一个数组时,你有责任跟踪它里面有多少个元素。给定一个指向动态分配数组的指针(如temp),无法确定数组中的元素数量。

你有什么等于sizeof(int*)/sizeof(int),这不会做你期望的。

id.insert(id.begin(),temp[0], temp[ArraySize]); 

std::vector::insert需要一系列迭代器:您提供了两个值。大概你想使用temp,它指向动态分配数组的初始元素,temp + i + 1,它指向数组末尾的一个。也就是说,由于您尚未设置阵列中元素的值,因此您正在复制未初始化的内存,这可能不是您的意思。

select_p[i].push_back(id); 

select_p[i]std::vector<int>std::vector<int>::push_back()需要附加到序列的单个int。推测你只是想用转让将id转让给select_p[i]

如果您想学习使用C++编程,您应该得到a good introductory C++ book。我很抱歉地说你的程序是无稽之谈。

+0

而'delete [] temp;'应该在'if(n == 0 && m == 5){...}'块内。 – a1ex07 2011-04-13 01:53:27

+0

请不要关心我的阵列里面的东西 – aki 2011-04-13 02:04:36

+1

这并不重要。即使您为数组中的元素分配了有效值,您的代码仍然完全没有意义。 – 2011-04-13 02:16:44