簡體   English   中英

在C ++向量中訪問元素大小

[英]Access the element out of size in C++ vector

今天我在VS2012和Max OS 10.7中嘗試這樣的東西

    vector<int> vec;
    vector<int> vec2;
    for(int i = 0;i < 100 ;i++){
        vec.push_back(i);
    }

    cout << "size: " << vec.size() << endl;
    cout << "capacity: " << vec.capacity() << endl;
    cout << vec[127] << endl;
    //vec2.reserve(10);
    fill_n(vec.begin(),128,-1);
    cout << vec[127] << endl;
    return 0;

因為我們知道vector的大小是容器中元素的實際數量,上面的代碼可能會導致VS2012中的運行時錯誤,但它在Max OS上運行正常,我在Ideone.com中嘗試並且運行成功,我是不確定大小和容量的定義是否有問題,為什么我可以訪問元素超出規模?

PS:我的電腦在這種情況下的容量在VS2012上是141,在Mac OS和Ideone.com上是128

std::vector operator []不會拋出任何超出范圍的錯誤。 使用[]運算符訪問大於矢量大小的元素是一種未定義的行為。

使用std::vector::at ,拋出std::out_of_range

碰到這個問題,我試着詳細解釋@ P0W的答案。

#1 2d向量的訪問元素

如果有人想要訪問2d矢量的元素,

應該執行以下操作並了解API 2dvector.at(row#).at(col#)

#include <vector>
#include <iostream>
using namespace std;

int main() {
    vector <vector<int> > vi;
    vi.push_back( vector <int>() );    // add empty 1d vector
    vi.at(0).push_back( 1 );           // push 1st element
    cout << vi.at(0).at(0) << endl;    // access element of 2d vector and prints 1
    vi.at(0).at(0) = 2;                // change number
    cout << vi.at(0).at(0) << endl;    // access element of 2d vector and prints 2
}

#2 std::out_of_range

如果你很難找到std::out_of_range的例子,這里就是一個

示例代碼

// out_of_range example
#include <iostream>       // std::cerr
#include <stdexcept>      // std::out_of_range
#include <vector>         // std::vector

int main (void) {
  std::vector<int> myvector(10);
  try {
    myvector.at(20)=100;      // vector::at throws an out-of-range
  }
  catch (const std::out_of_range& oor) {
    std::cerr << "Out of Range error: " << oor.what() << '\n';
  }
  return 0;
}

產量

Out of Range error: vector::_M_range_check

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM