Can you provide pseudo-code for swap(vector&)?
我不明白为什么会有人需要这么样一个功能?我以为是要swap vector里面的2个元素, swap2个vector太奇怪了,我不明白为什么会需要这么一个函数?
我猜想大概是这样吧?
vector a;
vector b;
<...>
a.swap(b);
为什么不作成这样:
vector * a;
vector * b;
a = new vector;
b = new vector;
<...>
vector *temp = a;
a = b;
b = temp;
这岂不是又快又爽?
-baalinca(scarb);
2006-3-31{305}(#2875439@0)
我还是不能理解为什么需要这个函数。如果是java不支持指针我可以理解。但是现在是c++#1 所有需要“交换2个vector内部所有元素”的地方都可以改用“直接交换2个vector的指针”来实现。放着直接交换指针这种最简单有效的方法不用,采用交换内容的方法,是没有道理的。
#2 “swaps some member variables of primitive types”当然很好,但是不同的节点类型要交换的成员变量不同,这意味着不同节点类型需要不同的swap。如果采用直接交换vector指针的方法,你根本不需要关心节点类型。
#3 交换指针也是exception-safe的。
vector *a; vector *b;
a = b;是简单的赋值语句,不需要创建temporary copy of b。
-baalinca(scarb);
2006-3-31{483}(#2875792@0)
My bad, T& operator=(const T& rhs) should be vector& operator=(const vector& rhs)
-super_unknown(mailman);
2006-3-31(#2876444@0)
Concept error -> '如果是java不支持指针我可以理解". Virtually there is no difference of swapping pointers in C++ and swapping references in Java.
-super_unknown(mailman);
2006-3-31(#2875981@0)
Two things you can trust me. First, I'm not homosexual, lol. Second, you are confused with C++ reference and Java referenceWhat you described is C++ reference, which is basically a pointer whose value can't be modified once initialized, regardless the syntax
Java reference is not the same, try compile & run this code
import java.util.Vector;
class test {
static void main(String[] args) {
Vector a = new Vector();
Vector b = new Vector();
Vector temp = a;
a = b;
b = temp;
}
};
-super_unknown(mailman);
2006-3-31{470}(#2876387@0)
我以后有机会试试看
-baalinca(scarb);
2006-3-31(#2876421@0)
You answer may not satisfy the time cost requirements for the operations on vectors.There are time cost requirements for the operations on vectors. For example, an insert should cost almost O(n) where n is the number of elements in the vector. In your answer, if the sizeof(T) is very big, the time cost is too big. To solve this issue, the objects of T are not directly stored in the array, but the address of the objects. So when you move objects, you only move the the pointers whose size is 4 in 32-bit machine. Thus the time cost can fulfill the requirements.
-benbenli(大岭);
2006-4-2{480}(#2879751@0)
don't you know that map/set in STL are all trees, red-black trees in most implementation?
-super_unknown(mailman);
2006-3-30(#2874654@0)
Then write a simple TREE that support a degree of 4. By the way, please pay attention to what is abstract structure and physical structure.
-iwantcar(EnjoyStudying);
2006-3-31(#2875487@0)
Put it this way, whatever data structure/algorithm you do in C, it can be done generically
with C++ template thanks to the compilerActually it is the original purpose of template, to make data structure/algorithm programming generic. Anyway I'm not an expert on data structure. Can you post your code in C so we can take a look?
Sorry if my previous posts offended you.
-super_unknown(mailman);
2006-3-31{242}(#2875529@0)
A tree in C? Yes, I want to spend the time to power up the 10 year old computer. this task is simple for every good computer science student.on the other hand, this code is available as C code everywhere if you would like to google it.
-iwantcar(EnjoyStudying);
2006-3-31{94}(#2875567@0)
You answer has nothing to do with STL. By the way, if one day I tell you that I need the node of tree has a pointer to its parent, And move the node from memory to harddrive.what are you going to do?Because your code is so versatile, I guess you must have good time make it happen.
-iwantcar(EnjoyStudying);
2006-3-31{82}(#2875805@0)
Have you ever heard of C++ template and generic programming?
-super_unknown(mailman);
2006-3-30(#2874656@0)
If you prefer void * for different types of elements in your data structure, and cast it back/forth in your applications, then enjoy it! I enjoy one genric code with template and "template <typename T>"let alone the superiority of template compile-time strong type checking to the error prone C style run time pointer casting.
-super_unknown(mailman);
2006-3-30{124}(#2874664@0)
can't input chinese these days.
nice artitle. it all depends. are you trying to kill a chicken, or a cow. pick a wrong tool will make the work harder.
-liuhuaiyu(不找小生意了谁去冰钓);
2006-3-30(#2873501@0)