从数组初始化向量的直接方法似乎是:
int sizeArr; int * array = getArray(sizeArr);
std::vector<int> vec(array, array+sizeArr);
这里,我从一个函数中获取数组,该函数在内存中分配空间并通过引用设置sizeArr
。 {start edit}不幸的是,这个函数不是由我编写的,我需要处理C样式数组然后以某种方式将其转换为向量。 (如果可能的话)。 {end edit}
当我初始化vec
时,显然我会分别为它分配空间。如果我不打算再使用array
使用数据,是否可能以某种方式&#34;移动&#34; array
指向向量vec
的数据,而不是单独为它分配任何空间?
答案 0 :(得分:4)
如果来电者不拥有数据(即不负责删除数据),那么最简单的选择可能就是写一个类似容器的包装器:
template <typename T>
struct array_wrapper
{
typedef T* iterator;
typedef const T* const_iterator;
array_wrapper(T* begin, T* end) : data_(begin), size_(end-begin) {}
iterator begin() { return data_; }
iterator end() { return data_ + size_; }
const_iterator begin() const { return data_; }
const_iterator end() const { return data_ + size_; }
size_t size() const { return size_; }
T& operator[](size_t i) { return _data[i]; }
const T& operator[](size_t i) const { return _data[i]; }
void swap(array_wrapper& other) {
std::swap(size_, other.size_);
std::swap(data_, other.data_);
}
private:
T* data_;
size_t size_;
};
然后
array_wrapper<int> vec(array, array+sizeArr);
这具有std::vector
的许多功能,但不拥有基础数据,并且不支持任何可能导致调整大小或重新分配的操作。
答案 1 :(得分:0)
为什么你甚至用int指针分配内存? 很有可能你没有理由这样做。
如果你有一个协助c ++ 11的编译器,应该可以用std :: vector vec {array}初始化向量; 或者,如果您不再需要该数组,只需删除它并将数组的引用推送到向量