以下實現了c++標準模板庫std::vector的部分實現,參考了 cplusplus.
關於c++中標準模板庫std::vector的介紹和用法可以參考
實現**vector.hpp內容如下:
#ifndef fbc_stl_vector_hpp_
#define fbc_stl_vector_hpp_
#include namespace fbcstd ; // class vector
templateinline
vector::vector() : size_(0), capacity_(0), buffer_(nullptr)
templateinline
vector::vector(size_type n, const value_type& val)
templateinline
vector::vector(const vector& x)
templateinline
vector::~vector()
templateinline
void vector::reserve(size_type n)
} buffer_ = new value_type[capacity_]; }}
templateinline
size_t vector::capacity() const
templateinline
size_t vector::size() const
templateinline
bool vector::empty() const
templateinline
t* vector::data()
templateinline
const t* vector::data() const
templateinline
t& vector::at(size_type n)
templateinline
const t& vector::at(size_type n) const
templateinline
t& vector::operator (size_type n)
templateinline
const t& vector::operator (size_type n) const
templateinline
vector& vector::operator = (const vector& x)
templateinline
void vector::clear()
templateinline
t& vector::back()
templateinline
const t& vector::back() const
templateinline
t& vector::front()
templateinline
const t& vector::front() const
templateinline
void vector::push_back(const value_type& val)
buffer_[size_] = val;
size_ += 1;
}templateinline
void vector::pop_back()
templateinline
void vector::resize(size_type n, value_type val)
for (size_t i = size_; i < n; ++i)
buffer_[i] = val;
} size_ = n;
}templateinline
t* vector::begin()
templateinline
const t* vector::begin() const
templateinline
t* vector::end()
templateinline
const t* vector::end() const
templatestatic inline
bool operator == (const vector& lhs, const vector& rhs)
return true;
}templatestatic inline
bool operator != (const vector& lhs, const vector& rhs)
templatestatic inline
bool operator < (const vector& lhs, const vector& rhs)
else
}} } else if (lhs.size() < rhs.size()) else
}} } else else
}} }
return flag;
}templatestatic inline
bool operator <= (const vector& lhs, const vector& rhs)
templatestatic inline
bool operator > (const vector& lhs, const vector& rhs)
templatestatic inline
bool operator >= (const vector& lhs, const vector& rhs)
} // namespace fbcstd
#endif // fbc_stl_vector_hpp_
測試**test_vector.cpp內容如下:
#include #include "vector.hpp"
#include "string.hpp"
#define std fbcstd
int main()
std::vectorvec4(vec3);
fprintf(stdout, "\nvec4 size: %d, capacity: %d, empty: %d\n", vec4.size(), vec4.capacity(), vec4.empty());
std::string* p2 = vec4.data();
fprintf(stdout, "vec4 data: \n");
for (size_t i = 0; i < vec4.size(); ++i)
*p2++ = "test vector";
const std::string* p3 = vec4.data();
for (size_t i = 0; i < vec4.size(); ++i)
fprintf(stdout, "\n");
} return 0;
}
cmakelists.txt內容如下:
project(samples_stl_implementation)
cmake_minimum_required(version 3.0)
set(cmake_c_flags "$ -g -wall -o2 -std=c11")
set(cmake_cxx_flags "$ -g -wall -o2 -std=c++11")
include_directories($/src)
message(status "project source dir: $")
file(glob tests $/test/*.cpp)
foreach (test $)
string(regex match "[^/]+$" test_file $)
string(replace ".cpp" "" test_basename $)
add_executable($ $)
target_link_libraries($ pthread)
endforeach()
build.sh指令碼內容如下:
#! /bin/bash
real_path=$(realpath $0)
dir_name=`dirname "$"`
echo "real_path: $, dir_name: $"
new_dir_name=$/build
mkdir -p $
cd $
cmake ..
make
cd -
編譯及執行操作步驟:將終端定位到samples_stl_implementation目錄下,執行:$ ./build.sh , 然後再執行$ ./build/test_vector即可。
github:
在c 中標準模板庫STL的介紹及使用
stl主要包括容器 迭代器和演算法3大部分。stl中其他的內容如演算法等,都是圍繞容器和迭代器來實現。常用的容器類包括string類 vector容器 list容器和map容器等.string類用於字串的處理,包括常用的字串操作,如賦值 複製 貼上 刪除字元以及替換字元等 使用string類中的成員...
C 中標準庫std string的實現
以下實現了c 標準模板庫中std string中的部分實現,參考了cplusplus.關於c 中標準模板庫std string的介紹和用法可以參考 實現 string.hpp如下 ifndef fbc stl string hpp define fbc stl string hpp include ...
C 標準模板庫
map是stl的乙個關聯容器,它提供一對一 其中第乙個可以稱為關鍵字,每個關鍵字只能在map中出現一次,第二個可能稱為該關鍵字的值 的資料處理能力。資料的插入 includemapstudent strdent.insert pair 1,xiaoming strdent.insert pair 2...