首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

将vector <int*>视为vector <const int*>而不复制(C++ 0x)

这是一个关于C++ 0x中vector<int>的特性的问题。在C++ 0x中,vector<int>的声明可以省略掉模板参数,直接写成vector<int*>。这种声明方式在语法上等同于vector<const int*>,因为const关键字表示该类型的元素是常量,不能被修改。

因此,在C++ 0x中,可以将vector<int>视为vector<const int>,而不需要复制数据。这种特性可以节省内存空间,提高程序的运行效率。

以下是一个使用这种特性的示例代码:

代码语言:c++
复制
#include <vector>

int main() {
  std::vector<int*> vec = new int[10];
  // 可以像使用const vector<int*>一样使用这个vector
  for (int i = 0; i < 10; i++) {
    vec[i] = new int(i);
  }
  // 修改vec[i]的值,不会影响vec[i+1]
  vec[2] = new int(2);
  // 删除vec[i]也不会影响vec[i+1]
  delete vec[2];
  // 可以像使用const vector<int*>一样使用这个vector
  for (int i = 0; i < 10; i++) {
    cout << vec[i]->val << " ";
  }
  return 0;
}

这个代码片段创建了一个包含10个int指针的vector,并用new为其分配内存。然后,它修改了vector中一个元素的值,并删除了该元素。最后,它遍历了整个vector并打印出每个元素的值。

需要注意的是,在使用这种特性时,如果vector中的元素是常量,那么它们必须被声明为const。此外,这种特性只在C++ 0x中有效,因此在较早的C++版本中需要使用其他方法来实现类似的功能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • STL小结

    STL就是Standard Template Library,标准模板库。这可能是一个历史上最令人兴奋的工具的最无聊的术语。从根本上说,STL是一些“容器”的集合,这些“容器”有list, vector,set,map等,STL也是算法和其它一些组件的集合。这里的“容器”和算法的集合指的是世界上很多聪明人很多年的杰作。是C++标准库的一个重要组成部分,它由Stepanov and Lee等人最先开发,它是与C++几乎同时开始开发的;一开始STL选择了Ada作为实现语言,但Ada有点不争气,最后他们选择了C++,C++中已经有了模板。STL又被添加进了C++库。1996年,惠普公司又免费公开了STL,为STL的推广做了很大的贡献。STL提供了类型安全、高效而易用特性的STL无疑是最值得C++程序员骄傲的部分。每一个C++程序员都应该好好学习STL。大体上包括container(容器)、algorithm(算法)和iterator(迭代器),容器和算法通过迭代器可以进行无缝连接。

    01

    C++11的简单介绍(上)

    在2003年C++标准委员会曾经提交了一份技术勘误表(简称TC1),使得C++03这个名字已经取代了C++98称为C++11之前的最新C++标准名称。不过由于C++03(TC1)主要是对C++98标准中的漏洞进行修复,语言的核心部分则没有改动,因此人们习惯性的把两个标准合并称为C++98/03标准。从C++0x到C++11,C++标准10年磨一剑,第二个真正意义上的标准珊珊来迟。相比于C++98/03,C++11则带来了数量可观的变化,其中包含了约140个新特性,以及对C++03标准中约600个缺陷的修正,这使得C++11更像是从C++98/03中孕育出的一种新语言。相比较而言,C++11能更好地用于系统开发和库开发、语法更加泛华和简单化、更加稳定和安全,不仅功能更强大,而且能提升程序员的开发效率,公司实际项目开发中也用得比较多,所以我们要作为一个重点去学习。C++11增加的语法特性非常篇幅非常多,我们这里没办法一 一讲解,所以本篇博文主要讲解实际中比较实用的语法。

    01
    领券