2014-10-17 49 views
2

我試圖使用矢量svec來存儲一些字符串值。但是,在Dev C++ 5.6.1編譯時,編譯器報告「操作符=不匹配」的錯誤。爲什麼會出現這個錯誤以及如何解決它?謝謝。如何修改矢量成員的值?

#include<vector> 
    #include<iostream> 
    #include<string> 
    using namespace std; 
    int main() { 
     vector<string> svec[100]; 
     for (int i = 0; i < 100; ++i) { 
      svec[i] = "ABC"; 
     } 
     return 0; 
    } 

[錯誤]敵不過 '運算符='(操作數的類型是 '標準::矢量>' 和 '爲const char [4]')

編輯:問題是在向量SVEC [ 100];將它改爲vector svec(100)後,情況會好轉;

edit2:我很好奇編譯器認爲這個聲明如下。 svec仍然被宣佈爲矢量?

vector<string> svec[100]; 
+2

'svec'是一組向量。你需要一個大小爲100的矢量,'vector svec(100);' – juanchopanza 2014-10-17 15:03:47

+0

我知道這可能只是一個例子,但是一個提示:你可以創建一個具有相同元素的矢量,像這樣重複:'vector svec(100, 「ABC」);' – 2014-10-17 15:04:37

+0

是的問題在於聲明。謝謝。 – 2014-10-17 15:06:07

回答

6

vector<string> svec[100];是創建與std::vector<std::string> 100個元素的陣列。這是有效的語法,儘管這是一件很奇怪的事情。

因此在當前形式下,svec[i]因此是指std::vector<std::string>。爲此分配「ABC」是不可能的。這就是你得到錯誤的原因。

你的意思寫的是vector<string> svec(100);。這稱爲vector構造函數中的一個,其將矢量預先設定爲具有100個元素。

它只是發生,std::vector重載[]運營商給你的元素訪問。 (一個非常方便的模擬純數組。)如果您進行更改,svec[i]將引用一個字符串,您可以按照您當前的方式進行設置。

+0

快樂。相當冗長的解釋,但確實解釋了爲什麼在編譯過程中出現「相當晚」的錯誤。 – Bathsheba 2014-10-17 15:15:18

2

更改本聲明

vector<string> svec[100]; 

vector<string> svec(100); 

也就是說,不是100個向量數組你應該定義100個元素的向量。:)

或者你可以簡單地寫

vector<string> svec; 
    // svec.reserve(100); 
    for (int i = 0; i < 100; ++i) { 
     svec.push_back("ABC"); 
    } 

而最簡單的方法是以下

int main() { 
     vector<string> svec(100, "ABC"); 
     return 0; 
    }