2015-04-02 55 views
0

我已經宣佈了以下多個位置:MSVC調試器告訴我,我的矢量比規定

const int NUMBER_OF_DIGITS = 16; 
std::vector<int> digits(NUMBER_OF_DIGITS); 

然而,當我打開MSVC調試它顯示以下內容:

enter image description here

這我是如何給矢量添加數值的:

for (int i = 0; i < NUMBER_OF_DIGITS; ++i) { 
     scanf("%d", &digits[i]); 
    } 

是th是正常的?我可以忽略這個嗎?或者這是一個問題?

的完整代碼(該程序依然沒有準備好):

#include <iostream> 
#include <vector> 
#include "stdio.h" 

const int NUMBER_OF_DIGITS = 16; 

int checksum, tmp1, tmp2, tmp3, sum = 0; 

std::vector<int> digits(NUMBER_OF_DIGITS); 
std::vector<int> new_digits(NUMBER_OF_DIGITS); 

int luhn_checksum(std::vector<int> cardnumber[NUMBER_OF_DIGITS]) { 
    //step 1: duouble every second number 
    for (int i = 1; i < NUMBER_OF_DIGITS; i += 2) { 
     new_digits[i] = digits[i] * 2; 
     if (new_digits[i] > 9) { 
      //if the product is larger than 9 we will add the two numbers together 
      //example: 9 * 2 = 18 so we will add 1 + 8 to get 9 
      tmp1 += new_digits[i] % 10; 
      new_digits[i] /= 10; 
      tmp1 = 0; 
     } 
    } 

    //step 2: sum all the values 
    for (int i = 0; i < NUMBER_OF_DIGITS; ++i) { 
     checksum += new_digits[i]; 
    } 

    return checksum; 
} 

void get_card_numbers(void) { 
    for (int i = 0; i < NUMBER_OF_DIGITS; ++i) { 
     scanf("%d", &digits[i]); 
    } 
} 

void initialize(void) { 
    for (int i = 0; i < NUMBER_OF_DIGITS; ++i) { 
     digits.push_back(0); 
     new_digits.push_back(0); 
    } 
} 


int main() { 
    initialize(); 

    get_card_numbers(); 

    printf("checksum is: %d\n", luhn_checksum(&digits)); 


    std::cout << digits.size() << std::endl; 


    int x; scanf("%d", &x); 
    return 0; 
} 
+0

告訴我什麼'COUT << digits.size()<< endl'打印 – 2015-04-02 20:54:58

+0

@MustafaOzturk'''的std ::法院<< digits.size()<<的std :: ENDL;'''打印出32 – user3084450 2015-04-02 20:58:21

+0

你能發表完整的例子嗎?你正在爲你的矢量做些什麼(而且你絕對應該擔心它的大小等於32) – 2015-04-02 20:59:37

回答

1

您使用的是digits的構造是通過設置大小指定計數。所以在打電話給push_back之後,你剛剛添加了16個矢量。使用不設置計數的其他構造函數。

int _tmain(int argc, _TCHAR* argv[]) 
{ 
    const int NUMBER_OF_DIGITS = 16; 

    std::vector<int> digits(NUMBER_OF_DIGITS); 
    //std::vector<int> digits; 

    int digitsLen = digits.size(); 
    // Here is 16 

    for (int i = 0; i < NUMBER_OF_DIGITS; ++i) { 
     digits.push_back(0); 
    } 

    int digitsLen2 = digits.size(); 
    // Here is 32 

    return 0; 
} 
0

盪滌你的代碼位:

#include <iostream> 
#include <vector> 
#include <algorithm> 

using namespace std; 

static const size_t NUMBER_OF_DIGITS = 16; 

class cards { 
public: 
    cards(); 
    void read(); 
    int luhnChecksum() const; 
private: 
    vector<int> digits; 
}; 

cards::cards() : digits(NUMBER_OF_DIGITS, 0) 
{ 
} 

void cards::read() { 
    for_each(digits.begin(), digits.end(), [](int& i) { cin >> i; }); 
} 

int cards::luhnChecksum() const { 
    vector<int> newdigits(digits.begin(), digits.end()); 
    for (size_t i=1; i<NUMBER_OF_DIGITS; i += 2) { 
     newdigits[i] = digits[i] * 2; 
     if (newdigits[i] > 9) { 
    int tmp1 = newdigits[i] % 10; 
    newdigits[i] /= 10; 
    newdigits[i] += tmp1; 
     } 
    } 

    return accumulate(newdigits.begin(), newdigits.end(), 0); 
} 

int main() { 
    cards c; 
    c.read(); 
    cout << "checksum = " << c.luhnChecksum() << endl; 
    return 0; 
}