首页 > 解决方案 > 指向 C++ 中的向量数组并将其发送到函数

问题描述

我想在 C++ 中定义一个向量数组。通常我可以这样做:

vector <pair<int,int> > G[100];

我有一个从文件中读取数据的函数。

我的第一个问题是我想用从文件中读取的G大小进行定义,并且应该在 main 中定义,但是使用未初始化的指针调用函数是行不通的。VG

我的第二个问题是当我G这样定义时:

vector <pair<int, int> > *G;
G = new vector <pair<int, int>>[10];  

它不能正确读取数据(它不能正常工作)。

这是我的代码:

void readData(vector <pair<int, int> > *G)
{
    int V, E;
    ifstream file("input.txt");
    file >> V >> E;
    //G = new vector <pair<int, int>>[V]; //my problem
    for (int i = 0; i < E; i++)
    { 
        int u, v, w;
        file >> u >> v >> w; 
        G[u - 1].push_back(make_pair(v - 1, w)); 
        G[v - 1].push_back(make_pair(u - 1, w)); 
    }
    file.close();
}
int main() {
    vector <pair<int, int> > *G;
    G = new vector <pair<int, int>>[10]; // my problem
    MST = new vector <pair<int, int>>;
    readData(G);
}

示例数据:

5 6
1 3 4
1 2 3
2 4 6
4 3 5
4 5 20
5 2 21

并且此代码正常工作并从控制台读取数据:

const int N=10;
vector <pair<int,int> > G[N];
int main() {    
    cin >> V>>E;
    for(int i=0; i<E; i++){
        int u,v,w;
        cin >>u>>v>>w; 
        G[u-1].push_back(make_pair(v-1,w)); 
        G[v-1].push_back(make_pair(u-1,w)); 
    }
}

标签: c++vector

解决方案


当使用向量完全符合您的要求时,没有理由使用内置数组。例如,您可以这样做:

void readData(std::vector<std::vector<std::pair<int, int>>>& G)
{
    std::size_t V, E;
    std::ifstream file("input.txt");
    file >> V >> E;
    //G = new vector <pair<int, int>>[V]; //my problem
    G.resize(V); // solved!!!
    for (std::size_t i = 0; i < E; i++)
    {
        std::size_t u, v, w;
        file >> u >> v >> w;
        G[u - 1].push_back(std::make_pair(v - 1, w));
        G[v - 1].push_back(std::make_pair(u - 1, w));
    }
    file.close();
}
int main() {
    std::vector<std::vector<std::pair<int, int>>> G;
//    G = new vector <pair<int, int>>[10]; // my problem
//    MST = new vector <pair<int, int>>;
    readData(G);
}

推荐阅读