C++类内初始化vector的一个小坑与分析解决

2023-05-16


tags: C++ Debug STL

问题

先来看这样一份代码:

vector<vector<int>> v(10, vector<int>(10));

没有任何问题, 初始化一个10*10的全零二维数组, 但是, 如果在类内:

class P {
private:
    vector<vector<int>> v(10, vector<int>());
public:
    P() {}
    void print() {
        for (auto i : v) {
            for (auto j : i) cout << j << " ";
            cout << endl;
        }
    }
};

就会报错:

// clang++: error: expected parameter declarator
// g++: error: expected ',' or '...' before numeric constant
// error: expected identifier before numeric constant

那么这是为什么呢?

用一维数组试试:

class P {
private:
    vector<int> v(10);
public:
    P() {}
    void print() {
        for (auto i : v) cout << i << " ";
    }
};

还是一样的情况…

那么换初始化列表(C++11)呢?

vector<vector<int>> v{{1, 2}, {3, 4, 5}};

这样就可以了…

解决

declaring a vector - C++ Forum (cplusplus.com);

后来看cplusplus, 想起来了Effective STL item6, 当心C++编译器烦人的分析机制, 发现原来是括号的问题, 导致了二义性, 但是这只是作为类内数据成员来看的, 其他时候并不用担心, 解决方案是:

class P {
private:
    vector<int> v = vector<int>(10);

public:
    P() {}
    void print() {
        for (auto i : v) cout << i << " ";
    }
};

void t1() {
    //
    P p;
    p.print();
}
int main(int argc, char const *argv[]) {
    t1();
    return 0;
}

针对二维数组的初始化:

vector<vector<int>> v = vector<vector<int>>(10, vector<int>(10));

虽然冗余, 至少可行, 后来发现可以用一致性初始化.

#include <vector>
#include <iostream>
using namespace std;


class P {
private:
    vector<int> v;

public:
    P() : v(10) {}
    void print() {
        for (auto i : v) cout << i << " ";
    }
};

void t1() {
    //
    P p;
    p.print();
}
int main(int argc, char const *argv[]) {
    t1();
    return 0;
}

相当完美.

二维数组类似, 只需要用同样的初始化方式即可:

#include <vector>
#include <iostream>
using namespace std;


class P {
private:
    vector<vector<int>> v;

public:
    P() : v(10, vector<int>(10)) {}
    void print() {
        for (auto i : v) {
            for (auto j : i) cout << j << " ";
            cout << endl;
        }
    }
};

void t1() {
    //
    P p;
    p.print();
}
int main(int argc, char const *argv[]) {
    t1();
    return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++类内初始化vector的一个小坑与分析解决 的相关文章

  • Ubuntu查看和设置环境变量

    文章目录 1 查看环境变量2 设置方式2 1 把你的路径加入PATH2 2 命名一个新的环境变量 3 作用域3 1 用于当前终端3 2 用于当前用户3 3 用于所有用户 转载 1 查看环境变量 查看环境变量有三个命令 xff1a env x
  • CorelDRAW2022下载附带序列号安装教程

    CorelDRAW2022作为图形设计软件的代表 xff0c 以其杰出和革新的特性赢得了长期的声誉和用户的赞赏 xff0c 是一套屡获殊荣的图像编辑软件 CorelDRAW 2022包含程序 xff1a CorelDRAW 2022主程序矢
  • ASCII码、Unicode编码对照表 —— ASCII控制字符 Unicode编码 字符编码的前世此生

    ASCII控制字符 Unicode编码 ASCII xff08 American Standard Code for Information Interchange xff0c 美国信息互换标准代码 xff0c ASC xff09 是基于拉
  • RealSR真实场景超分

    一 Camera Lens Super Resolution 本文主要解决RealSR的数据问题 xff0c 通过控制镜头到物体的距离产生成对的真实数据 xff08 Real paired SR data xff09 xff08 1 xff
  • 5374. 长度为 n 的开心字符串中字典序第 k 小的字符串(回溯算法)

    5374 长度为 n 的开心字符串中字典序第 k 小的字符串 List lt String gt res 答案集合不能定义为StringBuilder类型 剩下的就是回溯算法 span class token keyword class s
  • 宝塔忘记端口,解决办法

    1 xff0c 登陆远程连接 xff0c 输入ll 2 输入cd后再ll 3 清下屏 xff0c 输入clear 4 xff0c 输入cd www server panel data 找到port pl 5 输入cat port pl查看端
  • 幽冥传奇

    JAVA环境添加 setx M JAVA HOME D YM cnmmm com bl20166 Java jdk1 8 0 144 setx M CLASSPATH JAVA HOME lib dt jar JAVA HOME lib t
  • TOR下载教程

    不想用自己浏览器ip访问可用以下设置 xff0c 当然有很多其他方法 1 xff0c 官网https www torproject org 2 xff0c 下载对应版本 3 xff0c 打开tor 洋葱浏览器 并选择config 4 lin
  • 几步搞懂cobalt strike启动

    很多人问Cobalt strike怎么启动 xff0c 总结几句 1 cmd管理员身份运2 切换到CS所在目录3 输入ipconf找到自己ip地址4 输入teamserver 自己ip 密码 回车即可5 打开start bat文件再点击确定
  • TOR下载和网桥配置教程

    不想用自己浏览器ip访问可用以下设置 xff0c 当然有很多其他方法 1 xff0c 官网https www torproject org 2 xff0c 下载对应版本安装即可 本节以windows为例 xff08 苹果 安卓手机都有对应a
  • XSS漏洞,通过XSS实现网页挂马

    今天讲下通过XSS实现网页挂马 xff0c 目的是了解安全方面知识 xff0c 提升生活网络中辨别度 原理 xff1a 实验分为两部分 xff1a 1 通过Kali linux xff0c 利用MS14 064漏洞 xff0c 制作一个木马
  • qt样式有时不生效问题分析

    qt 中的样式表非常方便 xff0c 可以自定义自己想要的控件 但是有时候会发现使用样式表时 xff0c 样式不会生效 接下来分析一下主要原因 xff1a 1 样表格式不正确 2 样式表的样式被子对象覆盖 xff0c 设置时注意作用对象 x
  • 逻辑回归案例

    应用案例 之前学习了逻辑回归 xff0c 我们现在来做一个案例 一个图片验证码识别的案例 xff1a 怎么从图片中准确的识别出正确的数字 我们分了三步 第一步 xff1a 先生成150验证码图片 xff0c 每个图片有5个数字 图片中有随机
  • CorelDRAW x4提示非法软件产品被禁用解决方法教程

    说起PS大部分人都有所耳闻 xff0c 甚至会一些简单的操作 但是CDR x4这名字相信有很多人就很陌生了 xff0c 所以在这里也很有必要先说一下CDR到底是个什么样的存在 CDR全名CorelDRAW xff0c 是加拿大Corel公司
  • Mybatis-Plus中分页插件PaginationInterceptor, MybatisPlusInterceptor在SpringBoot中的使用

    配置分页插件 span class token annotation punctuation 64 Configuration span span class token keyword public span span class tok
  • 矩阵连乘问题-构造最优解

    题目描述 使用动态规划算法求解矩阵连乘问题 输入 每组数据包括两行 xff0c 第一行为数组长度n xff0c 第二行为存储矩阵维数的一维数组 输出 矩阵连乘最优计算次序 样例输入 Copy 7 30 35 15 5 10 20 25 样例
  • 树莓派启动——安装+无显示器使用+自启动VNC

    目录 硬件准备软件准备写入系统启动树莓派换源VNC自启动 时隔一年多 xff0c 拿起树莓派却忘记如何使用了 本想用作自己搭建git服务器 xff0c 后续再完成了 在此记录一下使用流程 硬件准备 树莓派 3b 43 TF卡和读卡器 xff
  • Debain 10(Buster)换源

    Debain 10 Buster 换源的操作步骤 必要条件 xff1a 已经安装好的Debain 10 Buster 开始 Debain 10 Buster 换源的操作步骤步骤一 备份原始的源文件用户切换到root下 进行源文件备份 二 换
  • 使用nginx反向代理突然失灵

    之前使用nginx反向代理还好好的 xff0c 后来再启动项目时突然失灵 xff0c 浏览器显示如下 然后开始排查错误 xff0c 首先直接使用ip地址访问是正常的 xff0c 然后使用hosts中映射的域名访问是无效的 xff0c 这说明
  • win10 安装 Linux子系统(WSL)

    序 xff1a 前段时间字节不是发布了 modernJS 的开源项目吗 xff1f 大概看了一部分的内容 xff0c 这些的东西就不一一列出来了 xff0c 本来想尝一口的 xff0c 在环境准备的系统那里就先折了一下 xff08 目前支持

随机推荐

  • Java 集合

    ArrayList 默认长度为10 indexOf lastIndexOf 通过equals方法判断索引 span class token keyword public span span class token keyword int s
  • Java 多线程知识

    参考链接 xff1a https www cnblogs com kingsleylam p 6014441 html https blog csdn net ly0724ok article details 117030234 https
  • Java I/O

    参考链接 xff1a https blog csdn net m0 71563599 article details 125120982 https www cnblogs com shamo89 p 9860582 html https
  • 最小生成树 prim算法(附代码)

    prim算法是以一个根节点开始慢慢往下延伸 xff0c 不断寻找距生成树最短的距离的节点 xff0c 然后将该节点纳入生成树的集合中 xff0c 然后再将该节点影响的其他未纳入生成树节点的距离更新 xff08 缩小与生成树的距离 xff09
  • cdr x4检测显示软件产品已被禁用警告弹窗,如何解决教程分享

    偶尔翻开移动硬盘 xff0c 找到这货 xff0c CorelDraw X4简体中文正式版 网上现在比较难下载得到了 xff0c X4是我最常用的一个 现在把它分享出来 xff0c 有需要的可以去下载使用 orelDRAW X4打开显示被禁
  • 数据结构与算法题目集(中文) 6-1 单链表逆转 (20 分)

    本题要求实现一个函数 xff0c 将给定的单链表逆转 函数接口定义 xff1a List Reverse List L 其中List结构定义如下 xff1a typedef struct Node PtrToNode struct Node
  • HTML5 Table 布局实现 商品列表

    运行结果如上 下面说说设计过程 xff1a 一开始试探的做的时候 xff0c 是建立了一个table xff0c 这个table里面放一本图书的信息 然后建立了一个列 xff0c 然后建立了个td xff0c td里面放图片 xff0c t
  • POJ 1050 To the Max(动态规划)

    Given a two dimensional array of positive and negative integers a sub rectangle is any contiguous sub array of size 1 1
  • web前端 背景色属性bgcolor

    通过 lt body gt 元素中的bgcolor属性来设定网页的背景颜色 其语法格式如下 xff1a lt body bgcolor 61 34 value 34 gt 颜色是属性值的设定有三种方法 xff1a 1 颜色名称 规定颜色值为
  • java连接数据库步骤

    1 加载驱动 Class forname 数据库驱动名 2 建立数据库连接 使用DriverManager类的getConnection 静态方法来获取数据库连接对象 xff0c 其语法格式如下所示 Connection conn 61 D
  • 怎么从零开始运行github / 现成的项目

    这篇博客是作为非计软科班出身的我记录的一些经验 xff0c 希望得到交流和批评 目录 环境配置 通过文件命名了解项目 demo 代码运行的入口 设定参数的文件 build 通过代码了解项目 64 装饰器 一些交流时用到的术语 API 交流或
  • 生产环境中使用Kolla部署OpenStack-allinone云平台(红帽8版本)

    CentOS8系统中使用Kolla部署OpenStack allinone云平台 Kolla概述和openstack所有结点linux系统初始配置 kolla是openstack下面用于自动化部署的一个项目 xff0c 它基于docker和
  • vue2项目-request配置put请求Content-Type为x-www-form-urlencoded

    在项目中遇到需要使用put请求的接口 使用的方式是x www form urlencoded 步骤梳理 在项目的request js文件是默认配置了json方式的 span class token keyword import span a
  • STM32学习第一课——新建工程与点亮LED灯

    第一次接触到32位的MCU与之前所学的51单片机和430单片机都是有所不同的 xff0c STM32是用库函数来写程序的这样一来不管是从代码的编写和移植都会方便很多 以下是今天所学的东西 xff1a 1 新建工程 个人觉得不用去新建一个工程
  • 基于arm架构的ubuntu18 .04安装Anaconda3 + pytorch+python3.9

    记录一下项目踩坑经历 xff08 查了很多资料 xff0c 感觉都是对有基础的人来说的 xff0c 对于刚接触深度学习环境的小白并不友好 xff0c 很多细节并没有 xff0c 各种坑无数 xff0c 我也是花了好长时间才弄清楚 xff09
  • MathType7应用中文版特色功能介绍

    MathType 是由美国Design Science公司开发的功能强大的数学公式编辑器 xff0c 它同时支持Windows和Macintosh 操作系统 xff0c 与常见的文字处理软件和演示程序配合使用 xff0c 能够在各种文档中加
  • QT的延时函数

    延时函数在收发数据的时候用处很大 在其他方面也有用处 这里提供四种方法 1 多线程程序 使用QThread sleep 或者QThread msleep 或QThread usleep 或QThread wait 进行延时处理 Sleep不
  • ios基础篇(八)—— iOS触摸事件

    iOS中的事件 iOS事件中分为三大类 xff0c 触摸事件 xff0c 加速器事件 xff0c 远程控制事件 响应者对象 在iOS 中 不是任何对象都是能处理事件的 xff0c 只有继承于UIResponder 的对象才能接受并且处理事件
  • 牛客C++ACM模式输入输出11道题分析与总结

    tags C 43 43 Interview 写在前面 感觉好久没写博客了 最近看的书多 但是真正沉淀下来的东西却很少 这次总结一下C 43 43 刷题中常用的一些IO操作 也就是ACM模式中的一些基本操作 看到知识星球里面推荐了牛客的一个
  • C++类内初始化vector的一个小坑与分析解决

    tags C 43 43 Debug STL 问题 先来看这样一份代码 vector span class token operator lt span vector span class token operator lt span sp