2017-05-30 91 views
-2

我有一個char向量的C++向量:std::vector<std::vector<char>> ref 將字符放入它後(大小增加,所以字符在那裏)我無法打印它。char向量的C++向量不能被打印

通過調用this->ref.back().back()它正確地打印最後一個字符。但如果我做ref.at(0).at(pos)ref[0].at(pos)ref[0][pos] 什麼都不打印。

個字符放入如下:

while (infile>>c) 
    { 
     if (c != '>') { 
      ref.back().push_back(c); 
      curSeqPos++; 

     } 
     else { 
      infile.ignore (std::numeric_limits<std::streamsize>::max(), '\n'); 
      ref.push_back(std::vector<char>(USHRT_MAX)); 

      curSeq++; 
      curSeqPos = 0; 
     } 
    } 

任何想法,我做錯了什麼?我是C++的真正新手,可能在某處錯過了一個參考。 任何幫助表示讚賞!

+2

什麼是'pos'等於? – kfx

+9

這是一個[MCVE]大大改進的問題。沒有看到你寫的內容,很難知道你的錯誤在哪裏。 –

+0

對不起,我正在讀取一個文件,並希望將每個字符存儲在一個數組/矢量中。如果一行以「>」開始,這行應該被忽略,並且應該創建一個新的char向量 – cruxi

回答

0

我不能真正做出很多形式的代碼。但是從這個std::vector<std::vector<char>> ref,ref是矢量的二維陣列

由於ref是char的向量的二維陣列,所以ref的每個索引ref[1]都必須保持char向量。你必須這樣做,那就是爲ref的索引創建一個單獨的char向量,否則嘗試在該索引處打印內容,即SIGSEGV錯誤。

你也不能這樣做ref[0][1] = 'd';,除非在ref [0] you'v已經指定了一個char的向量,否則你會得到SIGSEGV錯誤。

std::vector<std::vector<char>> ref(7); 
    std::vector<char> ref1(7); 

    //try 
    //ref[0][0] = 'f'; SIGSEGV error cus ref[0] is empty 

    ref1[0] = 'r'; 
    ref[0] = ref1; 
    ref[0][3] = 'g'; //valid 

    std::cout << ref[0][0]; // r 
+1

OP的語法沒有錯,所以他們已經知道這一點。這不是一個有用的答案。 –

+0

@ BoundaryImposition我編輯解釋可能的原因爲什麼cruxi得到她的錯誤 –

0

給我的最好的是建設性的,這裏的的作品例如:

#include <string> // for stdout, putc 
#include <vector> 
std::vector<std::vector<char>> const slist = 
    {{'o','n','e'},{'t','w','o'},{'t','h','r','e','e'}}; 

int main() { 
    const int sz = slist[1].size(); 
    for(int p=0; p<sz; p++) { 
     putc(slist[1][p],stdout); 
    } 
    putc('\n',stdout); 
    return(0); 
} 

這版畫 「兩\ n」 來標準輸出。你不能像你所期望的那樣在你的角色矢量上使用printf(「%s \ n」,slist [1])。這甚至沒有提出警告,只是打印出亂碼。 Cout < < iostreams的slist [1]因類型轉換錯誤而失敗。

我們正在朝着你的問題的方向前進嗎?請指導我們。