A. c++vector的add改成push_back了
C++标准库的vector, basic_string, list, deque 都是 push_back 方法
B. vector c++, 如果类里有一个成员是vector。。。。。
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class A
{
vector<string> name;
public:
A(string v)
{
name.push_back(v);
cout<<name[0]<<endl;
}
void changeName(string v)
{
name.clear();
name.push_back(v);
cout<<name[0]<<endl;
}
};
void main()
{
A stu("lucy");
stu.changeName("lily");
}
C. vector<vector<string>> 与vector<vector<string> >区别
C++ Primer 第五版上面说,对于C++11标准是没有区别的,但是不同的编译器可能编译的结果不同,老版本的编译器要写成vector<vector<string> > 。否则,系统会认为 >> 是单个符号,为右移操作符,并导致编译时错误。 那么如果编译时没有出错就是能直接写vector<vector<string>>了。
D. 一个c++vector的问题,求高手指点。编译器提示是:error LNK2001: 无法解析的外部符号 "public: static c
static成员必须在类外初始化,(除非是静态整型常量可以直接声明的时候初始化)
#include <vector>
using namespace std;
class m_test{
public:
static vector< vector<int> > m_vector_array;
};
vector< vector<int> > m_test::m_vector_array;
int main()
{
vector<int> tempP;
m_test::m_vector_array.push_back(tempP);
return 0;
}
E. c++中vector的作用是什么
c++中,vector作为容器,它的作用是:用来存放结构体struct类型的变量。以下是vector的具体用法:
工具/材料:电脑、c++编译器
1、首先,打开c++编译器,构造一个int类型的空vector向量。
F. c++中vector用法
c++中,vector作为容器,它的作用是:用来存放结构体struct类型的变量。以下是vector的具体用法:
工具/材料:电脑、c++编译器
1、首先构造一个int类型的空vector向量。
相关信息
C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。
C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。
C++不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。
G. C++6.0编译器vector警告
没问题的,警告而已啊。。。
H. C语言问题
利用运算符重载(下面的例子是重载 “+”)。
所谓运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。
自定义类的赋值运算符重载函数的作用与内置赋值运算符的作用类似,但是要要注意的是,它与拷贝构造函数与析构函数一样,要注意深拷贝浅拷贝的问题,在没有深拷贝浅拷贝的情况下,如果没有指定默认的赋值运算符重载函数,那么系统将会自动提供一个赋值运算符重载函数。
下面是Vector的定义—— 包含成员字段、构造函数和一个ToString()重写方法,以便查看Vector的内容,最后是运算符重载:
namespace Wrox.ProCSharp.OOCSharp
{
struct Vector
{
public double x, y, z;
public Vector(double x, double y, double z)
{
this.x = x;
this.y = y;
this.z = z;
}
public Vector(Vector rhs)
{
x = rhs.x;
y = rhs.y;
z = rhs.z;
}
public override string ToString()
{
return "( " + x + " , " + y + " , " + z + " )";
}
这里提供了两个构造函数,通过传递每个元素的值,或者提供另一个复制其值的Vector,来指定矢量的初始值。第二个构造函数带一个Vector参数,通常称为复制构造函数,因为它们允许通过复制另一个实例来初始化一个类或结构实例。注意,为了简单起见,把字段设置为public。也可以把它们设置为private,编写相应的属性来访问它们,这样做不会改变这个程序的功能,只是代码会复杂一些。
下面是Vector结构的有趣部分—— 为+运算符提供支持的运算符重载:
public static Vector operator + (Vector lhs, Vector rhs)
{
Vector result = new Vector(lhs);
result.x += rhs.x;
result.y += rhs.y;
result.z += rhs.z;
return result;
}
}
}
运算符重载的声明方式与方法的声明方式相同,但operator关键字告诉编译器,它实际上是一个运算符重载,后面是相关运算符的符号,在本例中就是+。返回类型是在使用这个运算符时获得的类型。在本例中,把两个矢量加起来会得到另一个矢量,所以返回类型就是Vector。对于这个+运算符重载,返回类型与包含类一样,但这种情况并不是必需的。两个参数就是要操作的对象。对于二元运算符(带两个参数),如+和-运算符,第一个参数是放在运算符左边的值,第二个参数是放在运算符右边的值。
C#要求所有的运算符重载都声明为public和static,这表示它们与它们的类或结构相关联,而不是与实例相关联,所以运算符重载的代码体不能访问非静态类成员,也不能访问this标识符;这是可以的,因为参数提供了运算符执行任务所需要知道的所有数据。
前面介绍了声明运算符+的语法,下面看看运算符内部的情况:
{
Vector result = new Vector(lhs);
result.x += rhs.x;
result.y += rhs.y;
result.z += rhs.z;
return result;
}
这部分代码与声明方法的代码是完全相同的,显然,它返回一个矢量,其中包含前面定义的lhs和rhs的和,即把x、y和z分别相加。
下面需要编写一些简单的代码,测试Vector结构:
static void Main()
{
Vector vect1, vect2, vect3;
vect1 = new Vector(3.0, 3.0, 1.0);
vect2 = new Vector(2.0,–4.0,–4.0);
vect3 = vect1 + vect2;
Console.WriteLine("vect1 = " + vect1.ToString());
Console.WriteLine("vect2 = " + vect2.ToString());
Console.WriteLine("vect3 = " + vect3.ToString());
}
把这些代码保存为Vectors.cs,编译并运行它,结果如下:
Vectors
vect1 = ( 3 , 3 , 1 )
vect2 = ( 2 ,–4 ,–4 )
vect3 = ( 5 ,–1 ,–3 )
I. C++定义一个类,类的对象是vector,vector的元素是数组,用C++该怎么表示呢很急,求大神帮忙!
你可以写出vector<int[10]> vec这样的定义,这在大部分编译器下都是可以通过编译的,但没有任何用处。因为数组不支持=赋值操作符,在push_back的时候会有问题。用vector<vector<int>>应该很容易达到你要的效果。
如果非要用数组的话,折中的方法我想到的有两种:
1. 使用vector<int*> vec这样的定义,访问数组数据时用计算地址的方法代替索引。比如:
int a[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9,};
vec.push_back(a);
int res = *(vec[0] + 3); // res = 3
2.使用一个类对数组进行一次包装,然后重载该类的=操作符。比如:
class A
{
public:
int a[10];
A& operator=(const A& aa)
{
for(int i = 0; i < 10; i++)
a[i] = aa.a[i];
}
};
这样可以用vector<A> vec定义完成类似的功能。如:
A r1; r1.a = {1, 2, 3, ....} (这一行是伪代码)
A r2; r2.a = {1, 3, 5, ....} (伪代码)
vec.push_back(r1);
vec.push_back(r2);
int res = vec[0].a[0]; // res = 1
res = vec[1].a[1];// res = 3
以上。望采纳。
J. 用vector代替数组,有没有必要
没必要。
用new动态分配数组,需要时时刻刻记住delete,很容易造成memory leak。使用vector和string则消除了这个负担,因为它们有自己的内存管理,在它们的析构函数中会自动释放内存。
通常情况下用vector代替动态数组,如果要存储的元素类型是字符类型时使用string。
所有适合于序列容器的STL算法,vector和string都可以使用。所以使用vector和string会带来更多的便利。
许多string的实现采用了“引用计数”,用于消除不必要的内存分配和不必要的字符拷贝。但这样的实现在多线程环境中,需要注意一下因支持线程安全而导致的性能问题。
如果所使用的string以“引用计数”方式实现,同时又运行在多线程环境中,并因此影响了程序效率。考虑以下三种选择:(1)是否可以通过改变某个预处理变量禁用引用计数。(2)寻找另外一个不使用“引用计数”实现的string。(3)使用vector<char>代替string,vector不允许使用引用计数,所以不会有多线程性能问题。
VC编译器自2005版本之后,大概是考虑到线程安全问题,string均没有以“引用计数”方式实现。