c++ - 指向 C++ 中的向量数组并将其发送到函数
问题描述
我想在 C++ 中定义一个向量数组。通常我可以这样做:
vector <pair<int,int> > G[100];
我有一个从文件中读取数据的函数。
我的第一个问题是我想用从文件中读取的G
大小进行定义,并且应该在 main 中定义,但是使用未初始化的指针调用函数是行不通的。V
G
我的第二个问题是当我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));
}
}
解决方案
当使用向量完全符合您的要求时,没有理由使用内置数组。例如,您可以这样做:
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);
}
推荐阅读
- c++ - 等待线程完成和未来
- rest-assured - 使用 rest ssured 获取 302 删除 http 方法
- azure - 动态云 RetrieveRecordChangeHistory 数据工厂
- java - 带有ssl的spring webclient抛出NPE
- angular - 如何在重新加载时保留查询字符串
- android - Android - 在模拟器中没有信息的情况下启动 CameraIntent 活动以导致结果崩溃
- .net - 具有应用程序角色的守护程序应用程序无法访问具有相同角色的已定义 AuthorizeAttribute 的端点
- python - 从 Python 脚本中提取 splukn 数据
- flutter - Flutter MVVM 堆叠
- angular - Angular - 无法将 API 中的数据显示到模板中