使用C++ 0x,你可以使用std :: array <>,它就像一個很好的舊數組,它有一個STL容器的附加好處,因此允許許多std ::算法。
另外,你可能想嘗試boost :: array。
注意,也有std::tr1::array<>
。
編輯:
Actually, one of the cases that I hadn't gone into was to grow the vector while reading configuration files and then fix the size after that - DanS
那麼,爲什麼不是這個(illustrational):
#include <vector>
int main() {
std::vector<int> foo;
/* ... crunch upon foo ... */
// make a copy vector->vector:
const std::vector<int> bar (foo);
// make a copy any->vector
const std::vector<int> frob (foo.begin(), foo.end());
}
另外,如果你需要重新設置()的語義,但要禁止調整大小()等al,你可以寫一個容器適配器:
template <typename T, typename Allocator = allocator<T> >
class resettable_array {
public:
// container ...
typedef typename std::vector<T,Allocator>::iterator iterator;
typedef typename std::vector<T,Allocator>::const_iterator const_iterator;
...
iterator begin() { return vector_.begin() }
const_iterator begin() const { return vector_.begin(); }
...
void push_back (T const &v) { vector_.push_back (v); }
...
// custom
void reset() { ... }
private:
std::vector<T,Allocator> vector_;
};
參見:
什麼 「矢量算法」 你要使用?''中的任何與固定大小的std :: vector一起工作的東西都可以使用普通數組,因爲算法在迭代器而不是容器中處理。 –
我使用'find_if','for_each'和其他幾個。我沒有意識到我可以使用普通數組。 – DanS
如果你發現這裏是一個很好的答案,你應該接受一個:) –