如何在旧c++中初始化const-std向量
How to initialize a const std vector in old c++?
我的C++编译器标识为GNU 4.4.1
我认为自从c++11以来,你可以用这种方式初始化向量:
const std::vector<int> myVector = {1, 2, 3};
const std::vector<int> myVector2{1, 2, 3};
不幸的是,我没有使用c++11,所以myVector可以通过构造函数初始化。我需要创建一个永远不会被修改的向量。它必须由类中的differents函数共享,这样它也可以是静态的,甚至可以是类成员。当我的向量在c++98中定义时,有没有一种方法可以初始化它,就像上面的例子一样,或者类似的东西?
您可以从函数返回向量:
std::vector<int> f();
const std::vector<int> myVector = f();
或者,使用boost::assign::list_of。
@vll的答案可能更好,但您也可以这样做:
int temp[] = {1, 2, 3};
const std::vector<int> myVector(temp, temp + sizeof(temp)/sizeof(temp[0]));
但是,它确实创建了两个副本,而不是一个副本,并且用数组的名称污染了命名空间。
您已经得到了两个不错的答案。这只是两者的结合:
namespace detail {
template<typename T, size_t N>
size_t size(const T (&)[N]) { return N; }
std::vector<int> vecinit() {
int arr[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
return std::vector<int>(arr, arr+size(arr));
}
}
//...
const std::vector<int> myVector(detail::vecinit());
相关文章:
- 如何在旧c++中初始化const-std向量
- 我可以初始化 const 实例,以便我可以将其用作 const 来初始化数组吗?
- 为什么不能用两层列表初始值设定项初始化 2D std::array?
- 使用 const char* 初始化 const ref 字符串成员时幕后会发生什么
- 如何使用函数的输出初始化 const 数组结构字段?
- 无法初始化以 std::byte 作为成员类型的位字段
- 有效地初始化 const std::vector 类成员
- 正在初始化const boost multi_array
- 在类声明中初始化 const 成员变量时在调试模式下出现异常
- 为什么 2 个未初始化的 std::set::迭代器相等?
- 如何在现代C++中用生成器初始化 const 容器?
- 初始化 const 成员的正确方法
- 在构造函数中初始化私有 std::array 成员
- 如何通过头文件中的函数初始化 const int 数组?
- 通过与现有 QHash 连接来初始化 const QHash
- 使用 constexpr 和 std::array 进行静态初始化来替换动态初始化的 std::vector 的闰年
- 如何初始化 const std::vector<MyClass>
- 在构造函数中从 std::istream 初始化 const 类数据成员
- 使用std::cin初始化const变量有什么技巧吗
- 从"std::istringstream"初始化"const std::string"