Md *_*sal 191 c++ arrays declaration vector
我想像数组一样初始化一个向量.
例
int vv[2] = {12, 43};
Run Code Online (Sandbox Code Playgroud)
但是当我这样做的时候,
vector<int> v(2) = {34, 23};
Run Code Online (Sandbox Code Playgroud)
要么
vector<int> v(2);
v = {0, 9};
Run Code Online (Sandbox Code Playgroud)
它给出了一个错误:
在'{'标记之前预期的primary-expression
和
错误:预期','或';' 在'='之前
分别.
R. *_*des 260
使用新的C++标准(可能需要在编译器上启用特殊标志),您可以简单地执行:
std::vector<int> v { 34,23 };
// or
// std::vector<int> v = { 34,23 };
Run Code Online (Sandbox Code Playgroud)
甚至:
std::vector<int> v(2);
v = { 34,23 };
Run Code Online (Sandbox Code Playgroud)
在不支持此功能的编译器(初始化列表)上,您可以使用数组模拟它:
int vv[2] = { 12,43 };
std::vector<int> v(&vv[0], &vv[0]+2);
Run Code Online (Sandbox Code Playgroud)
或者,对于赋值给现有向量的情况:
int vv[2] = { 12,43 };
v.assign(&vv[0], &vv[0]+2);
Run Code Online (Sandbox Code Playgroud)
就像James Kanze建议的那样,拥有能够为您提供数组开头和结尾的函数更加强大:
template <typename T, size_t N>
T* begin(T(&arr)[N]) { return &arr[0]; }
template <typename T, size_t N>
T* end(T(&arr)[N]) { return &arr[0]+N; }
Run Code Online (Sandbox Code Playgroud)
然后你可以做到这一点,而不必重复大小:
int vv[] = { 12,43 };
std::vector<int> v(begin(vv), end(vv));
Run Code Online (Sandbox Code Playgroud)
Vik*_*ehr 29
你也可以这样做:
template <typename T>
class make_vector {
public:
typedef make_vector<T> my_type;
my_type& operator<< (const T& val) {
data_.push_back(val);
return *this;
}
operator std::vector<T>() const {
return data_;
}
private:
std::vector<T> data_;
};
Run Code Online (Sandbox Code Playgroud)
并像这样使用它:
std::vector<int> v = make_vector<int>() << 1 << 2 << 3;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
624828 次 |
| 最近记录: |