V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
razrlele
V2EX  ›  C

关于 STL 中 vector 的初始化问题

  •  
  •   razrlele · 2014-08-05 17:33:35 +08:00 · 1506 次点击
    这是一个创建于 3560 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我首先定义了一个结构体
    struct operator{
    int x;
    int y;
    char o;
    }operator;

    然后用vector定义了一个结构体数组
    int N;
    cin >> N;
    vector<operator> a(N);

    然后在一个自定义函数里面把结构体数组当作形参

    void function(vector<operator>& a)

    我知道我错了。。。但是具体错在哪里,求指正。。
    31 条回复    2014-08-06 01:05:48 +08:00
    lehui99
        1
    lehui99  
       2014-08-05 17:38:49 +08:00
    struct operator{
    ...
    }operator;

    变量名和结构体名冲突?
    razrlele
        2
    razrlele  
    OP
       2014-08-05 17:47:53 +08:00
    @lehui99 应该不是吧,这样好像没有问题啊

    改了一样报错
    lehui99
        3
    lehui99  
       2014-08-05 17:50:43 +08:00
    @razrlele operator是c++关键字,把operator的地方都改掉先。
    razrlele
        4
    razrlele  
    OP
       2014-08-05 17:52:01 +08:00
    @lehui99 啊。。这个地方我只是一个示范,代码里面写的不是operator,是operate
    bombless
        5
    bombless  
       2014-08-05 17:53:54 +08:00
    operator是一个保留字你不能用它做标识符。
    还有你function这个名字也最好改改,因为有个std::function类模板存在于C++11的标准库中。
    acros
        6
    acros  
       2014-08-05 17:54:00 +08:00
    一楼对的吧。

    struct CA{

    //......

    } ca;


    编译没错啊。
    lehui99
        7
    lehui99  
       2014-08-05 17:55:32 +08:00
    @razrlele 我改成
    struct operate1{
    int x;
    int y;
    char o;
    }operate2;
    测试了,我这里完全没问题。

    说明你在其他地方错了。
    bombless
        8
    bombless  
       2014-08-05 17:56:38 +08:00
    话说你定义变量a时那个N是做什么。你是想用std::array而不是std::vector对不对?
    razrlele
        9
    razrlele  
    OP
       2014-08-05 17:57:17 +08:00
    @bombless
    @acros
    啊啊,准确来说我这里写的是伪代码,我还是把真正的代码贴出来吧
    acros
        10
    acros  
       2014-08-05 17:57:41 +08:00
    难道楼主是弄混了
    typedef {...} structA;
    struct structA{ ... } ;
    struct { ... } structA;
    这几种?
    bombless
        11
    bombless  
       2014-08-05 17:58:52 +08:00
    @acros 同疑惑,我开始还在想是不是漏写了typedef
    chmlai
        13
    chmlai  
       2014-08-05 18:00:53 +08:00
    很久没碰 CPP 了, 好像是:
    vector<struct operator> a;
    或者
    typedef struct operator{...} operator;
    vector<operator> a;
    acros
        14
    acros  
       2014-08-05 18:03:15 +08:00
    @razrlele
    你取值方法错了···=_=

    你要对元素操作,不是对vector对象操作。
    razrlele
        15
    razrlele  
    OP
       2014-08-05 18:04:34 +08:00
    @acros 能不能具体一点?
    acros
        16
    acros  
       2014-08-05 18:05:17 +08:00   ❤️ 1
    @razrlele 传函数前你已经从vector取过值了,函数形参是coor&
    bombless
        17
    bombless  
       2014-08-05 18:06:10 +08:00
    没发现哪里要用vector,所有的vector那里都要去掉吧。
    lehui99
        18
    lehui99  
       2014-08-05 18:06:27 +08:00
    @razrlele

    void R(vector<coor>& a)
    {
    if(a.o == 'N')
    a.o = 'E';
    ...

    a是个数组,哪有.o属性……
    至少得加个下标吧,a[i].o
    acros
        19
    acros  
       2014-08-05 18:07:05 +08:00
    @bombless
    三个函数替换成:
    void L(coor& a)
    void R(coor& a)
    void F(coor& a ,int A, int B)

    这下明白了吧···
    bombless
        20
    bombless  
       2014-08-05 18:07:39 +08:00
    哦,大概理解这里的逻辑了,给每个操作vector的函数加一个for循环吧。
    razrlele
        21
    razrlele  
    OP
       2014-08-05 18:08:24 +08:00
    @acros 原来如此!!因为之前如果是int的话形参引用都是vector<int>所以才自以为是的以为结构体也是如此
    razrlele
        22
    razrlele  
    OP
       2014-08-05 18:09:12 +08:00
    @bombless 我需要动态分配数组,所以才用vector
    bombless
        23
    bombless  
       2014-08-05 18:11:25 +08:00
    感觉就是少写了一些逻辑…
    yxz00
        24
    yxz00  
       2014-08-05 18:16:06 +08:00
    先学会看报错再来问问题
    shyrock
        25
    shyrock  
       2014-08-05 18:32:08 +08:00
    询问错误至少应该把错误贴上来吧。。。
    losincasablanca
        26
    losincasablanca  
       2014-08-05 18:32:33 +08:00
    实在看不出来还可以单步,看看逻辑哪出错了。
    SErHo
        27
    SErHo  
       2014-08-05 18:42:26 +08:00
    struct operator{
    ...
    }operator;
    这样定义的化, operator 是一个类型为 struct operator 的值,不是一个类型。
    razrlele
        28
    razrlele  
    OP
       2014-08-05 18:49:35 +08:00
    @yxz00
    @shyrock
    恩,不好意思,忘记贴报错了,其实就是想问一下vector和结构体一起该怎么用,所以一开始也没有贴源码
    dreamworldcn
        29
    dreamworldcn  
       2014-08-05 18:58:34 +08:00
    贴一个刚写的

    <script src="https://gist.github.com/dreamworld/2a356a5ee25573aa55be.js"></script>
    erenno1
        30
    erenno1  
       2014-08-05 22:55:12 +08:00
    canautumn
        31
    canautumn  
       2014-08-06 01:05:48 +08:00
    @razrlele 你理解的不对吧,这跟int和结构体根本没关系。他的意思是说你传入的是vector<coor>的一个元素的引用,就是coor&,但你定义的形参是vector<coor>& a,编译时会报错说a没有o的成员,因为程序里a是vector<coor>&,而不是coor&
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2353 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 11:25 · PVG 19:25 · LAX 04:25 · JFK 07:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.