vector 輸出的全是最后一個插入的數據的問題


今天在寫代碼,聲明了一個vector<char*>后,把字符串一個一個插入其中,但是最后輸出的結果卻是vector容器中存放的都是最后一個插入的數據。插入 10條數據,最后輸出的是把最后一條數據輸出了10次。這是為什么?

有問題的代碼如下:

#include<iostream>
#include<vector>
using namespace std;
int main()
{  
    vector<char*> vec;
    char st[2];
    st[0] = '1';
    for(int i=0; i<5; i++)
    {
        st[1] = func();
        vec.push_back(st);
    }
    for(int i = 0; i < vec.size(); i++)
    {
        cout << vec[i] <<endl;
    }
    return 0;
            
}

以上總共會插入5條數據到vector中,假如第5次插入的是 "12",那么輸出的結果是把5個“12”.這是為什么呢?

解答:這里我們只定義了一個st數組,也可以看成是一個字符指針類型,每次操作都是對指針所指的地址上存放的數據進行修改。而vector<char*>又是一個指針類型的,指向的都是st,雖然對st進行了5次插入操作,但是vec容器中的元素指向的都是同一個塊地址,因此5個元素的值都會是一樣的,且是最后一次修改的值。

 

解決方案:

不使用指針,使用string。vector<string> 存放的是一個string變量,每次會重新申請一塊地址存放數據,不會出現以上的情況。

#include<iostream>
#include<vector>
using namespace std;
int main()
{  
    vector<sring> vec;
    char st[2];
    st[0] = '1';
    for(int i=0; i<5; i++)
    {
        st[1] = func();
        vec.push_back(st);
    }
    for(int i = 0; i < vec.size(); i++)
    {
        cout << vec[i] <<endl;
    }
    return 0;
            
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM