C++语句:vector<string>v_string;是什么意思?v_string代表什么?

ector是c++标准库的一个容器,如果你学过数据结构就知道有数组,线性表,链表之类各种东西吧,vector实际上就是数组。

string是c++标准库的字符串类型

v_string看上去在这里只是一个变量名而已,你起什么名都行,你就算换成
vector what_string;
vector hell_string;
vector louzhu_string;
vector shafa_string;

换什么都一样用,变量名只是一个帮助程序员记忆的一个符号而已,意义具体是什么你由你给于它的
追问:
vector(容器)包括算法么?
追答:
vector本身就是一个高级的数组,比数组高级在可以有类型检查,越界检查这些,本身并不是一个算法啊,只能说是一个数据结构吧
追问:
数据结构的三部分包括算法啊,我是说vector中有无对本成员的一些操作,如初始化等等
追答:
vector有很多操作,我建议你看一下这个资料,记录这个网址,对你以后学习c/c++都会很有帮助的

http://en.cppreference.com/w/cpp/container/vector

参考资料: http://en.cppreference.com/w/cpp/container/vector



c++ vector<string> 如何 erase

2009-12-11 16:25 liuchang8am  |  浏览 2069 次
#include <vector>
#include <iostream>
using namespace std;

vector<string> name;

for (int i = 0; i < 10; i++)
{
string name2;

cin >> name2;

name.push_back(name2);
}
然后如何用迭代器erase删除某个元素?
#include 
#include 
using namespace std;

vector name;

for (int i = 0; i < 10; i++)
{
string name2;

cin >> name2;

name.push_back(name2);
}

//定义迭代器, 比较你想要删除的string。

//比如 想删除 123;

vector name;
 
 for (int i = 0; i < 10; i++)
 {
  string name2;
  
  cin >> name2;
  
  name.push_back(name2);
 }
 
 vector::iterator nameIt;
 
 string s("123");
 name.erase( remove(name.begin(),name.end(),s) ,name.end() );
 for(nameIt = name.begin(); nameIt != name.end(); ++nameIt)
 {
  cout << *nameIt << endl;
 }



ector<string> 如何初始化 [问题点数:20分,结帖人hhulx]

  •            
  •            
  •            
  •            
  •            
  •            收藏
  • 回复次数:7






    vector<string>怎么用

    2011-08-11 12:32 balladgood  |  浏览 3077 次
    我有更好的答案

    1条回答

    2011-08-11 12:43 frog3211  | 四级  最快回答
    #include<string>
    #include <vector>
    #include <iostream>
    using namespace std;

    void main()
    {
    vector<string> vec;//定义个一个字符串容器
    string str;
    str = "abc";
    vec.push_back(str);//把字符串str压进容器
    vec.push_back("def");//把字符串"def"压进容器
    vec.push_back("123");
    for(int i=0; i<vec.size(); i++)
    {
    cout<<vec[i]<<endl;//打印容器的内容
    }
    vec.pop_back();//取出容器中最后一个
    for(int i=0; i<vec.size(); i++)
    {
    cout<<vec[i]<<endl;//打印容器的内容
    }
    }
    追问:
    有没有一次初始化的方法,而不用push_back
    追答:
    用这个也行哦
    vec.resize(4,"abc");
    一次性有4个abc
    标题:求教一个vector<string>指针问题
    dong820729
    Rank: 2
    等 级:论坛游民
    帖 子:11
    专家分:29
    注 册:2009-12-21
    结帖率: 50%
       已结贴   问题点数:20  回复次数:11   
         
    求教一个vector<string>指针问题
    该题目为c++primer的习题:编写程序定义一个vector对象,其每个元素都是指向string类型的指针,读取该vector对象,输出每个string的内容及其相应的长度。

    我的程序如下:

    #include<iostream>
    #include<string>
    #include<vector>
    #pragma warning(disable:4786) 
    using namespace std;
    int main()
    {
        string str;
        vector<string*> psvec;//为何这里用string*类型,不能用vector<string>*呢?
        while(cin>>str)
        {
            string *ps=new string;//为何这里要动态创建string,不能直接psvec->push_back(str)?
            *ps=str;//这里为何用*ps=str,不能使用ps=&str?
            psvec.push_back(ps);/*在这里我们把ps给psvec,那么psvec保存的应该是string*类型,
                                  下面的for循环显然使用了该类型的begin(),end()操作,
                                  为什么可以这样用?*/
        }
        for(vector<string*>::iterator iter=psvec.begin();iter!=psvec.end();++iter)
        {
            cout<<**iter<<" "<<(*iter)->size()<<endl;
            delete *iter;/*1.为何要释放*iter?
                           2.为何不是释放iter?
                           3.我们动态创建的是ps,为何不是释放ps?
                           4.我在网上找的答案是在这个for循环外另起一个同样的循环释放*iter,我在这里释放有何不可?
                             我在这里释放,编译也可通过,为何?*/
        }
        return 0;
    }


    此题给我的问题颇多,希望各位大神能给出详细解答!
    先行谢过!
    搜索更多相关主题的帖子:  string   指针   vector  
      2010-03-01 16:24
       
     
    cnfarer
    Rank: 20 Rank: 20 Rank: 20 Rank: 20 Rank: 20
    等 级:版主
    威 望: 178
    帖 子:3294
    专家分:21129
    注 册:2010-1-19
       得分:10 
         
    是否正确,望高手斧正!
    #include<iostream>
    #include<string>
    #include<vector>
    #pragma warning(disable:4786)
    using namespace std;
    int main()
    {
        string str;
        vector<string*> psvec;//vector<T> T是类型,而vector<T>*是指向一个vector的指针
        while(cin>>str)
        {
            string *ps=new string;//str不是string*类型,同时str的地址是不变的
            *ps=str;//*ps=str,ps=&str你认为它们是一样的吗?
            psvec.push_back(ps);/*在这里我们把ps给psvec,那么psvec保存的应该是string*类型,
                                  下面的for循环显然使用了该类型的begin(),end()操作,
                                  但begin(),end()返回的不是string* 而是string**  */
        }
        for(vector<string*>::iterator iter=psvec.begin();iter!=psvec.end();++iter)
        {
            cout<<**iter<<" "<<(*iter)->size()<<endl;
            delete *iter;/*  *iter就是ps  再用一个循环释放与这个没有本质差别*/
        }
        return 0;
    }

    ★★★★★为人民服务★★★★★
      2010-03-02 07:47
       
     
    cnfarer
    Rank: 20 Rank: 20 Rank: 20 Rank: 20 Rank: 20
    等 级:版主
    威 望: 178
    帖 子:3294
    专家分:21129
    注 册:2010-1-19
       得分:2 
         
    实际上你可以用vector<string>来处理这个问题,不必用vector<string*>

    #include<iostream>
    #include<string>
    #include<vector>
    #pragma warning(disable:4786)
    using namespace std;
    int main()
    {
        string str;
        vector<string> psvec;
        while(cin>>str)
        {
            psvec.push_back(str);
        }
        for(vector<string>::iterator iter=psvec.begin();iter!=psvec.end();++iter)
        {
            cout<<*iter<<" "<<iter->size()<<endl;
        }
        return 0;
    }

    [  本帖最后由 cnfarer 于 2010-3-2 08:03 编辑 ]

    ★★★★★为人民服务★★★★★
      2010-03-02 07:58
       
     
    dong820729
    Rank: 2
    等 级:论坛游民
    帖 子:11
    专家分:29
    注 册:2009-12-21
       得分:0 
         
    还有些疑惑:ps在这里应该是一个string类型的动态指针,那么*ps=str表示对ps解引用操作保存的是str的值,而ps=&str表示ps保存的是str的地址,那么对ps进行解引用应该也是得到的str的值啊。所以我不明白,为什么只能用*ps=str而不能使用ps=&str。事实上,我试过把*ps=str改成ps=&str,确实出现一堆错误,请问这两者有何区别,谢谢!
      2010-03-02 09:12
       
     
    秀痘魔导士
    Rank: 9 Rank: 9 Rank: 9
    等 级:蜘蛛侠
    威 望: 6
    帖 子:250
    专家分:1150
    注 册:2009-12-23
       得分:1 
         
    以下是引用dong820729在2010-3-2 09:12:19的发言:

    还有些疑惑:ps在这里应该是一个string类型的动态指针,那么*ps=str表示对ps解引用操作保存的是str的值,而ps=&str表示ps保存的是str的地址,那么对ps进行解引用应该也是得到的str的值啊。所以我不明白,为什么只能用 ...
    编译成功,没有问题
      2010-03-02 11:26
       
     
    秀痘魔导士
    Rank: 9 Rank: 9 Rank: 9
    等 级:蜘蛛侠
    威 望: 6
    帖 子:250
    专家分:1150
    注 册:2009-12-23
       得分:1 
         
    以下是引用cnfarer在2010-3-2 07:47:58的发言:

    是否正确,望高手斧正!
    #include<iostream>
    #include<string>
    #include<vector>
    #pragma warning(disable:4786)
    using namespace std;
    int main()
    {
        string str;
        vector<string*> psvec;//vector<T>  ...
    delete *iter这边不对,*iter是string的指针。
      2010-03-02 11:27
       
     
    cnfarer
    Rank: 20 Rank: 20 Rank: 20 Rank: 20 Rank: 20
    等 级:版主
    威 望: 178
    帖 子:3294
    专家分:21129
    注 册:2010-1-19
       得分:3 
         
    回复 4楼 dong820729
    *ps=str是赋值(将str的内容复制到ps所指向的地址空间)!而ps=&str是改变了ps指向的内存空间的地址,不再是申请到地址了,而是str的地址!

    ★★★★★为人民服务★★★★★
      2010-03-02 14:13
       
     
    cnfarer
    Rank: 20 Rank: 20 Rank: 20 Rank: 20 Rank: 20
    等 级:版主
    威 望: 178
    帖 子:3294
    专家分:21129
    注 册:2010-1-19
       得分:1 
         
    而string本身就应该是个指针,所以ps=&str以后,肯定要出错的

    ★★★★★为人民服务★★★★★
      2010-03-02 14:21
       
     
    cnfarer
    Rank: 20 Rank: 20 Rank: 20 Rank: 20 Rank: 20
    等 级:版主
    威 望: 178
    帖 子:3294
    专家分:21129
    注 册:2010-1-19
       得分:0 
         
    回复 6楼 秀痘魔导士
    你可以delete **iter啊

    ★★★★★为人民服务★★★★★
      2010-03-02 14:24
       
     
    秀痘魔导士
    Rank: 9 Rank: 9 Rank: 9
    等 级:蜘蛛侠
    威 望: 6
    帖 子:250
    专家分:1150
    注 册:2009-12-23
       得分:0 
         
    以下是引用cnfarer在2010-3-2 14:24:47的发言:

    你可以delete **iter啊
    刚开始没仔细看,你写的没什么问题。我刚开始是看成了*iter你指代str的~

    [  本帖最后由 秀痘魔导士 于 2010-3-2 14:34 编辑 ]
    标题:求教一个vector<string>指针问题
    秀痘魔导士
    Rank: 9 Rank: 9 Rank: 9
    等 级:蜘蛛侠
    威 望: 6
    帖 子:250
    专家分:1150
    注 册:2009-12-23
       得分:2 
         
    以下是引用cnfarer在2010-3-2 14:21:36的发言:

    而string本身就应该是个指针,所以ps=&str以后,肯定要出错的
    ps指向str的地址空间,不会报错的。str就算你没初始化,一般编译器会给你一个默认值。只不过那样产生内存泄露,编译器是不会理会这个的

    [  本帖最后由 秀痘魔导士 于 2010-3-2 14:35 编辑 ]
      2010-03-02 14:30
       
     
    cnfarer
    Rank: 20 Rank: 20 Rank: 20 Rank: 20 Rank: 20
    等 级:版主
    威 望: 178
    帖 子:3294
    专家分:21129
    注 册:2010-1-19
       得分:0 
         
    回复 11楼 秀痘魔导士
    编译通过就行的话,就简单多了!




    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值