gpt4 book ai didi

c++ - 为什么我不能通过推回将值存储在我的 2D vector 中?

转载 作者:行者123 更新时间:2023-11-28 04:10:44 24 4
gpt4 key购买 nike

在尝试将值存储在 2D vector 中时,我遇到了很多问题。所以我写了这个简单的代码。

我只是存储和打印我的值:

int main()
{
vector<vector<int>> vec;
vector<int> row{1,3,5,7,9,12,34,56};
int i,n,m,rs,vs;
rs=row.size();
cout<<"rs = "<<rs<<endl;
for(i=0;i<(rs/2);i++)
{
vec[i].push_back(row.at(i));
vec[i].push_back(row.at(i+4));
}
vs=vec.size();
cout<<vs<<endl;
for(n=0;n<vs;n++)
{
for(m=0;m<2;m++)
{
cout<<vec[n][m]<<" ";

}
cout<<endl;
}
return 0;

}

最佳答案

首先你应该阅读Why is “using namespace std;” considered bad practice? .

在使用变量时而不是在程序开始时声明变量。

vector vec 开头是空的。在循环中

for(i=0;i<(rs/2);i++)
{
vec[i].push_back(row.at(i));
vec[i].push_back(row.at(i+4));
}

您正在使用

引用 vec 中的第 i 个元素
vec[i]

但是这个元素不存在。这是未定义的行为,可能会导致段错误。您可以通过使用所需元素构造 vector 来修复它

#include <iostream>
#include <vector>

int main()
{
std::vector<int> row{1,3,5,7,9,12,34,56};
int rs = row.size();
std::vector<std::vector<int>> vec(rs / 2);
std::cout << "rs = " << rs << '\n';
for(int i = 0; i < rs / 2; ++i)
{
vec[i].push_back(row.at(i));
vec[i].push_back(row.at(i + 4));
}
int vs = vec.size();
std::cout << vs << '\n';
for(int n = 0; n < vs; ++n)
{
for(int m = 0; m < 2; ++m)
{
std::cout << vec[n][m] << " ";
}
std::cout << '\n';
}
return 0;
}

在这个例子中是行

std::vector<std::vector<int>> vec(rs / 2);

构造一个包含rs/2 默认构造元素的 vector 。或者,您可以从一个空 vector 开始并在循环中推回元素

#include <iostream>
#include <vector>

int main()
{
std::vector<int> row{1,3,5,7,9,12,34,56};
int rs=row.size();
std::vector<std::vector<int>> vec;
std::cout << "rs = " << rs << '\n';
for(int i = 0; i < rs / 2; ++i)
{
vec.push_back({row.at(i), row.at(i+4)});
//
// is similar to:
// vec.push_back({});
// vec.back().push_back(row.at(i));
// vec.back().push_back(row.at(i+4));
//
// is similar to:
// vec.push_back({});
// vec[i].push_back(row.at(i));
// vec[i].push_back(row.at(i+4));
}
int vs = vec.size();
std::cout << vs << '\n';
for(int n = 0; n < vs; ++n)
{
for(int m = 0; m < 2; ++m)
{
std::cout << vec[n][m] << " ";
}
std::cout << '\n';
}
return 0;
}

我推荐第一种方案。最好为所有元素分配内存并使用它,而不是在每个循环迭代中分配内存。

关于c++ - 为什么我不能通过推回将值存储在我的 2D vector 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57841334/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com