2011-04-13 69 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