當前位置:首頁 » 服務存儲 » vector存儲方式代碼
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

vector存儲方式代碼

發布時間: 2022-07-15 03:53:49

『壹』 怎麼在C++中用Vector存放不同類型的數據..

namespace std {
template<class T,class A = allocator<T> > struct vector {
typedef typename A::value_type value_type;
typedef typename A::reference reference;
typedef A allocator_type;
typedef typename A::pointer pointer;
typedef typename A::size_type size_type;
// ...

explicit vector() throw() : sz(0), random_ptr() { }
// ...
void push_back(const value_type& v) {
!random_ptr ? random_ptr = new T(v): new(random_ptr+sz) T(v);
sz++;
}
reference operator[](size_type ind) { return *(random_ptr+ind); }
size_type size() const { return sz; }
// ...
private:
size_type sz;
pointer random_ptr;
};
}
在此我並沒有考慮到push_back()牽涉到的reserve(),只是大致上如此。如果你要想這段代碼能在main()下運行,請定義一個合適的析構函數。

『貳』 c++中vector的存儲問題

c++中的stl除了平常使用的vector、map之類的還有一個組件叫Allocator。其實是stl各類數據結構中統一的負責內存分配的組件。Allocator很少被顯示的調用,但其實各類stl數據結構在初始化的時候都支持顯示的指定Allocator組件。各類結構中的size和capacity函數數量的不一致就是Allocator導致的。size是當前容器中元素的數量。capacity是當前容易能夠容納元素的數量。其中capacity的變化就是Allocator重新申請內存導致的。所以說stl的容器實際上都是邏輯概念,他們實現僅僅是相應數據結構的使用方法,並不涉及真正的內存組織結構,內存住址結構都是由Allocator實現的。也就是說vector叫順序表、list是鏈表,但實際上在內存上list也可能是順序的,只不過list實現了鏈表的相應功能而已。

『叄』 C++如何用vector實現存放4行4列的,然後再在3行3列的數據,3行3列的數據放在4行4列數據的下面

給你寫一個代碼看看,不想測試,看看思想。關鍵是vector<vector<int>>
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char* argv)
{
vector<vector<int>> theVec;
vector<int>* pVec;
pVec = new vector<int>();
pVec->push_back(4);
pVec->push_back(5);
pVec->push_back(6);
pVec->push_back(7);
theVec.push_back(*pVec);
pVec = new vector<int>();
pVec->push_back(2);
pVec->push_back(4);
pVec->push_back(3);
pVec->push_back(8);
theVec.push_back(*pVec);
pVec = new vector<int>();
pVec->push_back(5);
pVec->push_back(3);
pVec->push_back(1);
pVec->push_back(0);
theVec.push_back(*pVec);
pVec = new vector<int>();
pVec->push_back(1);
pVec->push_back(6);
pVec->push_back(2);
pVec->push_back(9);
theVec.push_back(*pVec);
pVec = new vector<int>();
pVec->push_back(6);
pVec->push_back(3);
pVec->push_back(4);
theVec.push_back(*pVec);
pVec = new vector<int>();
pVec->push_back(2);
pVec->push_back(7);
pVec->push_back(9);
theVec.push_back(*pVec);
pVec = new vector<int>();
pVec->push_back(0);
pVec->push_back(8);
pVec->push_back(1);
theVec.push_back(*pVec);
return 0;
}

關鍵在於你應該理解vector是一個動態數組,可以動態分配大小,push_back操作是最基本的操作。這樣的實現不只適用於你所說的那個數據結構,任何以二維數組為標準的數據結構均可用vector來實現

『肆』 在c++中使用vector把大於0的數儲存下來,如何編寫這段代碼

vector<int>vec_data;
if(number>0)
{
vec_data.push_back(number);
}

『伍』 關於c++ vector

你用的是VS2010來測試的,所以輸出和你預想的不一樣,如果你用的是VC6,輸出和你想像的就一樣了。

在VC6裡面用的vector,iterator的實現很簡單,就是個指針:

typedef _Ty _FARQ *pointer;

typedef _A::pointer _Tptr;

typedef _Tptr iterator;

可以看到,iterator它就是個指針,所以,如果在VC6裡面測試,輸出是對的

而在VS2010裡面,iterator就不是個指針了,而是個類:

typedef _Vector_iterator<_Mybase> iterator;

可以看到,iterator其實是個模板類對象。所以,按照你的輸出結果就不對了。

至於你說的第4點,end()返回的迭代器指向的是元素結束的下一個位置,兩種寫法都對。

附VC6下面的測試截圖:

可以看到,輸出和你原來的預想是一樣的。VS2010裡面就不一樣了。


關於你補充的:

對於作用於對象上的++操作符,你不能相當然認為就是加在對象本身上,還是得從vector源代碼找原因,通過看VS2010 vector的代碼發現,++操作符是重載過的,代碼如下:

_Myiter& operator++()
{ // preincrement
#if _ITERATOR_DEBUG_LEVEL == 2
if (this->_Getcont() == 0
|| this->_Ptr == 0
|| ((_Myvec *)this->_Getcont())->_Mylast <= this->_Ptr)
{ // report error
_DEBUG_ERROR("vector iterator not incrementable");
_SCL_SECURE_OUT_OF_RANGE;
}

#elif _ITERATOR_DEBUG_LEVEL == 1
_SCL_SECURE_VALIDATE(this->_Getcont() != 0);
_SCL_SECURE_VALIDATE_RANGE(
this->_Ptr != 0
&& this->_Ptr < ((_Myvec *)this->_Getcont())->_Mylast);
#endif /* _ITERATOR_DEBUG_LEVEL */

++this->_Ptr;
return (*this);
}

可以看到,這個++操作符是作用在迭代器內部的一個指針上面的,而不是作用於迭代器本身。

另外,其它的操作符像*(解引用)也是重載過的,所以,你按照自己的想法來輸出的時候,可能會比較奇怪,這些你要從源代碼來分析。

『陸』 java集合類vector如何存儲數據 具體該如何使用 我是新手,謝謝

ArrayList會比Vector快,他是非同步的,如果設計涉及到多線程,還是用Vector比較好一些

import java.util.*;

/**
* 演示Vector的使用。包括Vector的創建、向Vector中添加元素、從Vector中刪除元素、
* 統計Vector中元素的個數和遍歷Vector中的元素。
*/

public class VectorDemo{
public static void main(String[] args){

//Vector的創建
//使用Vector的構造方法進行創建
Vector v = new Vector(4);

//向Vector中添加元素
//使用add方法直接添加元素
v.add("Test0");
v.add("Test1");
v.add("Test0");
v.add("Test2");
v.add("Test2");

//從Vector中刪除元素
v.remove("Test0"); //刪除指定內容的元素
v.remove(0); //按照索引號刪除元素

//獲得Vector中已有元素的個數
int size = v.size();
System.out.println("size:" + size);

//遍歷Vector中的元素
for(int i = 0;i < v.size();i++){
System.out.println(v.get(i));
}
}
}

『柒』 C++的vector存儲數據的問題

如果你的指針內存空間分配在堆上,直接定義std::vector<TYPE*> v; v.push_back(p); //存放的是指針
如果分配在棧上,可以定義std::vector<TYPE> v; v.push_back(*p); //存放的是類的實例

『捌』 c++ 關於用vector儲存struct

for (vector<a>::iterator it = vec.begin(); it != vec.end(); ++it) {
it->b

}

『玖』 C++vector的存儲方式,是把數據賦值到堆中嗎

放在棧裡面的nInt.push_back(tmp);實際上放的是tmp的拷貝。你要是沒有寫拷貝構造函數默認的按位拷貝,這樣不安全,你要是寫了拷貝構造函數就按按照你的方法在復制。

『拾』 c++中vector<string>可以存放什麼數據

利用C++做信號處理方面的模擬,於是就涉及到了大量數據的存儲。由於在讀取數據的時候,並不知道數據的長度,這時候,vector就很好用了,因為vector容器不用知道數組的長度。

編寫程序讀入一組string類型的數據,並將它們存儲在vector中,接著,把該vector對象復制給一個字元指針數組。為vector中的每個元素創建一個新的字元數組,並把該vector元素的數據復制到相應的字元數組中,最後把指向該數組的指針插入字元指針數組。

(10)vector存儲方式代碼擴展閱讀

vector拷貝使用總結

1、利用拷貝賦值操作符(深復制)

vector<int> array{3,5,2,6,4};

vector<int> outArray;

outArray = array;

2、利用拷貝構造(深復制)

vector<int> array{3,5,2,6,4};

vector<int> outArray(array);

3、利用swap()函數(交換兩個vector)

會清空原vector數組

vector<int> array{3,5,2,6,4};

vector<int> outArray;//設為空

outArray.swap(array);//清空array數組