推迟从矢量到地图矢量的数据

aki*_*aki 0 c++

我创建了一个名为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;   
}
Run Code Online (Sandbox Code Playgroud)

Jam*_*lis 5

for (int m=0; m<M; m++) {
    for (int n=0; n<N; n++) {
        if (n==0 && m==5) {
Run Code Online (Sandbox Code Playgroud)

你为什么要循环时,你实际上只为一对的值做任何事情mn?这里的循环完全无用; 只需设置n = 0和即可获得相同的效果m = 5.

temp = new int[3,i+N,i+N+1,i+1];
Run Code Online (Sandbox Code Playgroud)

无论你怎么想,这都不是它的作用.这相当于temp = new int[i+1];.内部表达的其余部分[]没有任何效果.

也就是说,您不应该使用new在程序中创建数组.使用std::vector; 它更容易正确使用.

unsigned ArraySize = sizeof(temp) / sizeof(int);
Run Code Online (Sandbox Code Playgroud)

这不起作用.动态分配数组时,您负责跟踪数组中的元素数量.给定一个指向动态分配数组的指针(如此temp处),无法确定数组中的元素数.

你拥有的东西相当于sizeof(int*) / sizeof(int),这不符合你的期望.

id.insert(id.begin(),temp[0], temp[ArraySize]);
Run Code Online (Sandbox Code Playgroud)

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

select_p[i].push_back(id);
Run Code Online (Sandbox Code Playgroud)

select_p[i]是一个std::vector<int>. std::vector<int>::push_back()采用int附加到序列的单个.想必你刚才的意思是使用赋值分配idselect_p[i].

如果你想学习用C++编程,你应该得到一本很好的C++入门书.我很遗憾地说你的程序是荒谬的.