• vector


    vector能向数组下标那样使用吗,
    答: 可以

    比如我用定义vector<int>s;能用s[i]进行运算或者s[i]==s[i+1]吗?
    答: 可以

    从函数中返回vector最高效的是采用引用参数的方式
    比如你定义一个函数:
    void fun(vector<int>& vi) // 参数定义为引用
    {
    在这里给vi赋值
    }
    void main()
    {
    vector<int> s;
    fun(s);// 调用函数返回数据到s
    }
     
    因为迭代器与容器是分离的,可以通过迭代器来操控容器里面的元素,但不能通过迭代器来操控容器。所以当容器内部发生变化,
    容器并不通知迭代器发生了什么变化(他们是分离的),所以当发生变化后,迭代器就失效了。
    而容器何时会发生变化,完全是掌握在程序员手里的,也就是说,例如对容器进行某个操作,将可能导致容器内部的变化,
    那么为了保证这个操作之后迭代器仍然有效,那么必须手动重新设置该迭代器。
     

    vector<string> &readText( ) /*返回一个对象的引用,这个对象的类型是vector<string>。即对应后面的return text。*,也就是返回这个对象本身,而非副本。/
    {
    vector<string> text;
    string word;
    while ( cin >> word ) /*不断读取输入的单词,直到读入结束或者读取失败。cin >> word返回cin本身,当它作为测试条件的时候,测试它的状态。当输入结束或者读取失败的时候,状态为逻辑值fasle,条件测试结果为false。*/
    {
    text.push_back( word );
    // ...
    }
    // ....
    return text;/*返回了一个局部变量,这个局部变量在函数return语句后就立即失效,其占用的内存被回收,这个内存可能没有被分配新用,也可能已经被重要的新对象占用,如果已经被分配做它用,返回这个对象的引用可能是个非常重要的对象,如果对这个对象操作,可能引起严重系统崩溃。*/
    }

    #include <cstdlib>
    #include <cstring>
    #include <string>
    #include <vector>
    #include <iostream>
    using namespace std;
    typedef vector<string>  vector_str;
    vector_str * split_str(const char *str, const char *splitter)
    {
        vector_str * p_vector = new vector_str;
        char * token;
        char * buff = new char[strlen(str) + 1];
        strcpy(buff, str);
        token = strtok(buff, splitter);
        while (token != NULL) {
            p_vector->push_back(token);
            token = strtok(NULL, splitter);
        }
        delete[] buff;   
        return p_vector;
    }
    int main(int argc, char *argv[])
    {
        vector_str * v1 = split_str("aa:bb:cc:dd", ":");
        vector_str::iterator Iter;
        for (Iter = v1->begin(); Iter != v1->end(); Iter++) {
            cout << *Iter << ' ';
        }
        delete v1;
        system("PAUSE");
        return 0;
    }

    呵呵,我用VS2010恰好也碰上类似问题
    如果有两个类:ADlg和BDlg,他们的文件和头文件分别是ADlg.cpp,ADlg.h,BDlg.cpp,BDlg.h
    我的做法是在ADlg.cpp 文件中包含BDlg.h ,在ADlg.h中定义了BDlg m_TreeManager;
    在ADlg.cpp的initDialog()函数中m_TreeManager.create(.....)关联了两个类,
    结果编译出现了楼主的相似问题
    解决方法:
    在ADlg.h头文件中也包含BDlg.h(#inlcude "BDlg.h")
    呵,编译成功!

  • 相关阅读:
    bzoj3926: [Zjoi2015]诸神眷顾的幻想乡 后缀自动机在tire树上拓展
    Codeforces Beta Round #64D
    bzoj2300#2300. [HAOI2011]防线修建
    Codecraft-18 and Codeforces Round #458 (Div. 1 + Div. 2, combined)G. Sum the Fibonacci
    D
    Codeforces Round #503 (by SIS, Div. 1)E. Raining season
    dp优化
    (CCPC-Final 2018)K
    Educational Codeforces Round 48 (Rated for Div. 2)G. Appropriate Team
    Python 匿名函数
  • 原文地址:https://www.cnblogs.com/zhuxuekui/p/3523425.html
Copyright © 2020-2023  润新知