如何初始化和填充矢量<矢量>类型的矢量<int>?
How do I initialize and fill a vector of type vector<vector<int> >?
我正在尝试返回一个write-a函数,该函数创建一个vector<vector<int> >
并填充它并返回它。当我试图将元素推入vector<vector int>
时,我面临分段错误。有人能帮我解决这个问题吗?
vector<vector<int> > Solution::prettyPrint(int A)
{
vector<vector<int>> arr;
for(int x=1;x<(2*A);x++)
{
for(int y=1;y<(2*A);y++)
{
int xp=x,yp=y;
if(x>A) xp=2*A-x;
if(y>A) yp=2*A-y;
int min=(xp<yp)?xp:yp;
arr[x-1].push_back(A+1-min);
}
}
return arr;
}
arr[x-1].push_back(A+1-min);
您正试图访问arr[x-1]
,但此时arr
是一个空向量。
既然你知道arr
的大小是2*A-1
(至少这是你代码中的大小),你可以放一个
arr.resize(2*A-1);
在外循环开始之前,或直接在声明时:
vector<vector<int> > arr(2*A-1);
您可以更进一步,甚至初始化内部向量:
for(int x=1;x<(2*A);x++)
{
arr[x-1].resize(2*A-1);
for(int y=1;y<(2*A);y++)
并替代
arr[x-1].push_back(A+1-min);
带有
arr[x-1][y-1]=(A+1-min);
您需要执行(假设您的矩阵大小为ROWS x COLS
)
vector<vector<int>> arr(ROWS, vector<int>(COLS));
并且不再需要CCD_ 12。2D数组的整个内存现在都被保留了,所以你只需要使用arr[i][j]
来写入它。代码也比使用push_back
快一点,因为push_back
在需要调整向量大小时会减慢重新分配的速度。
但是,尽量避免此类嵌套向量,因为它们速度较慢。请使用平面矢量,并从2D映射到1D,反之亦然。
没错,不要使用复杂的结构可以节省时间和精力,加快项目进度。使用2D阵列而不是push_back
使用arr[i][j]
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- EASTL矢量<向量<int>>连续的
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- 明确的专业化“ CheckIntmap&lt;&gt;”实例化
- 什么是模板&lt;&gt;inline bla bla
- 编辑C Qlist&lt; object*&gt; gt;QML代码和一些QML警告中的模型
- eigen :: llt&lt;eigen :: matrixxd&gt;具有不完整的类型
- 错误,包括&lt; ctype&gt;在原子上使用C 11
- std::vector<;uint8_t>;当C++11/14启用时,手动复制而不是调用memcpy
- 如何加入向量&lt; int&gt;到C 中的单个INT
- 是std :: set&lt; std :: future&gt;不可能存在
- 是numeric_limits&lt; int&gt; :: is_modulo从逻辑上矛盾
- opencv 2.4.7在iOS错误背景_segm.hpp #include&lt; list&gt;未找到
- 在修改列表后,std :: list&lt; t&gt; :: end()的值是否会更改
- ///<评论></评论>在Visual Studio中