由买买提看人间百态

topics

全部话题 - 话题: ptr1
(共0页)
O*******d
发帖数: 20343
1
来自主题: Programming版 - 一个面试题目,用C实现
把答案贴在下边
void reverseString(char *st)
{
int len;
char *ptr1, *ptr2, *ptr3;
char c;
len = strlen(st);
ptr1 = st;
ptr2 = st + len - 1;
/* first pass. Reverse entire string */
while(ptr2 > ptr1)
{
c = *ptr1;
*ptr1 = *ptr2;
*ptr2 = c;
ptr1++;
ptr2--;
}
/* second pass. Reverse each word */
ptr1 = ptr3 = st;
while(ptr1 < (st + len))
{
while(ptr3 < (st + len) && *ptr3 != ' ')
ptr3++;
b***i
发帖数: 3043
2
来自主题: Programming版 - C++含有指针成员的类
我觉得, 你前面ptr1是一个智能指针对象实例,然后构造一个A的实例,让ptr1来管理
,那么A现在的计数为1。当你把 ptr1通过push_back试图放到ptrList里面时,ptrList
[0]出现一个智能指针的实例,把A实例的计数加到2.
等你删掉ptr1时,虽然ptr1.use_count是0,那是因为你把它删掉了,所以它不知道指
向哪个对象了。这时ptrList[0]还是指向那个A的对象。
另一个例子,如果你把ptr1向ptrList1和ptrList2分别push_back,会发现ptr1.use_
count为3,如果删掉ptr1,这时查看ptrList1[0]和ptrList2[0],会发现他们都是2.这
两个数组里面存储着新的不同的智能指针对象,但是是管理同一个对象A。这两个智能
指针对象是在push_back的时候构造的,但是A的内容没有复制。
你原来的目的,不用smart pointer,也可以通过编译,只需要在B.h里面
class A;//必须对称,A.h里面要有class B;
class B{定义,不要实现};
.cpp include 两个.h,实现... 阅读全帖
m*****g
发帖数: 226
3
来自主题: JobHunting版 - 请教一道单链表问题
void removeDuplicated(node* ll)
{
if(!ll) return;
if(!ll->next) return;
node* ptr1, ptr2;
ptr1 = ll;
ptr2 = ptr1->next;
while(1)
{
if(ptr1->v == ptr2->v)
{
while(ptr1->v == ptr2->v)
{
node* ptr3 = ptr2->next;
llDeleteNode(ll,ptr3);
ptr2 = ptr3;
if(!ptr2) break;
}
llDeleteNode(ll, ptr1);
if(!ptr2) return;
if(!ptr2->next... 阅读全帖
y**b
发帖数: 10166
a**d
发帖数: 64
5
来自主题: JobHunting版 - 问两道fb题
第一题的java答案抄了一个,运行通过的。
https://github.com/nagajyothi/InterviewBit/blob/master/DynamicProgramming/
AvgSet.java
各路大神看看还有没有更优解。
// Sum_of_Set1 / size_of_set1 = total_sum / total_size, and so, Sum_of_Set1
= size_of_set1 * total_sum / total_size.
// Now we can just iterate on size_of_set1, and we would know the required
Sum_of_Set1.
static List res = new ArrayList();
static boolean[][][] dp;
public static List> partitionAverage(int[] num) {
List阅读全帖
d****n
发帖数: 1637
6
来自主题: Programming版 - 讨论 找单链表倒数m的节点 (转载)
ptr1=ptr2=start;
i=0;
while((i++)<=m) ptr1=ptr1->next();
while(ptr1->next()!=NULL) {
ptr1=ptr1->next() ;
ptr2=ptr2->next();
}
Still two loops, haha.
but the first loop is constant.
x*******6
发帖数: 262
7
来自主题: JobHunting版 - 面经
16题就是career cup上面linkedlist那节题吧,两个ptr1和2,ptr1一次向前一个node
,ptr2一次向前2个node,每次判断ptr1和ptr2是非重合,重合了就是有环。如果重合
,将ptr1重设到firstnode,ptr2变成每次向前一个node,两个ptr再次重合时的那个
node就是环首位相交的node
g*********s
发帖数: 1782
8
来自主题: Programming版 - typedef的一个问题
my_class在某个头文件里定义,有一个method叫print()。
typedef my_class *my_class_p;
my_class *ptr1;
my_class_p ptr2;
ptr1 = new my_class;
ptr2 = ptr1;
在gdb里,做ptr1->print(),没问题。做ptr2->print(),返回错误信息。
但是如果做((my_class *)ptr2))->print(),结果也正确。
这是怎么回事呢?是不是和文件包含顺序有关?确实是一个比较复杂的系统里发现的问
题。
d****n
发帖数: 1637
9
来自主题: Programming版 - 讨论 找单链表倒数m的节点 (转载)
恩,一般来说就是这么找。
但是你看看楼主开始提出的做法,两个指针的approach, 我觉得更smart 一些。
你的做法:
ptr1=start;
n=0;
while(*(++ptr1)) n++;
ptr2=start;
i=0;
while((i++)<=(n-m)) ptr2++;
楼主的第一个approach:
ptr1=start+m;
ptr2=start;
while(*(ptr1++) && *(ptr2++)) ;
两种算法都是ptr2是结果。(忽略边界判断)
我觉得就指针操作而言,楼主的提法更快,coding style 更好些。
我没看明白楼主优化的做法,貌似和第一个一样。
ps.不喜欢2个loop的approach
m*********a
发帖数: 3299
10
来自主题: Programming版 - 关于二维矩阵的C的问题
知道为啥下面会是这样的结果吗?
定义
char *ptr1[10];
可以
ptr1[0]="hello";
ptr1[1]="world";
...
...
ptr[9]="end";
可以看着10个rows的二维矩阵
但是无法进行ptr1[0][0]='X';
如果要进行这样的操作
可以定义
char (*ptr2)[10]
然后就可以进行 ptr2[0][0]='x'了。
但是无法进行
ptr2[0]="hello";
ptr2[1]="world";
y**b
发帖数: 10166
11
来自主题: Programming版 - C++含有指针成员的类
这个自然,就是不明白编译器怎么判断ptr1还在vector里面呢,总之reset有点特别,
或者智能指针实现有点特别。
如果是个内置指针,放入容器,然后delete该指针,会调用destructor,这个与上面的
行为不一样。代码如下:
int main(int argc, char** argv)
{
A *ptr1 =new A();
A *ptr2 = new A();
std::vector ptrList;
{
std::cout << "In the nested scope 1n";
ptrList.push_back(ptr1);
ptrList.push_back(ptr2);
}
{
std::cout << "In the nested scope 2n";
delete ptr1;
delete ptr2;
}
{
std::cout << "In the nested scope 3n";
ptrList.c...
阅读全帖
r*c
发帖数: 167
12
来自主题: JobHunting版 - 新鲜电面
RK肯定好写些,尽管它比KMP要慢不少。
前些天看到一个帖子,把RK的实现搞得特麻烦。下面贴个改进的,其中hash function
可替换,只要把各个char的信息都用到就好了。
class RobinKarpSolution
{
public:
char *strStr(char *haystack, char *needle) {
int nHSLen = strlen(haystack), nNDLen = strlen(needle);
if(nNDLen > nHSLen) return NULL;
int h_hash, n_hash = hashAString(needle, nNDLen, 0);
for(int i = 0; i <= nHSLen-nNDLen; ++i){
h_hash = hashAString(haystack, nNDLen, i);
if(n_hash == h_hash) {
if(!C... 阅读全帖
b********6
发帖数: 35437
13
保留或剔除重复结果太容易了
你要找的是在list1里出现但是不在list2里的,在list1, list2里各放一个指针ptr1,
ptr2,如果ptr1大于ptr2就增加ptr2
b**u
发帖数: 1206
14
来自主题: Programming版 - how to assign new value to loop variables?
malloc ptr1 for file1, malloc ptr2 for file2,...
link list for ptr1, ptr2,...
b**********r
发帖数: 1
15
来自主题: DotNet版 - function of function in C#?
Hi, guys,
I am new to C#.
but in C++, there are a lot of function of function usage, how is done in C#?
for example:
double f(double a);
double g(double a);
typedef double (* ptr_func)(double a);
double func_integrator( ptr_func ptr1, double x0, double x1, double
precision);
this should be a very common use, is it still possible in C#?
O*******d
发帖数: 20343
16
64bit的windows上,
int d = ptr1 - ptr2是错误的。
b***i
发帖数: 3043
17
来自主题: Programming版 - C++含有指针成员的类
我觉得应该是指针还有效的才能看到计数。
试验两句就懂了
在第一个{}里面去掉把ptr2加入的语句。可以看到,ptr2所指向的对象在reset那里被
销毁了
然后第二个{}那里,
std::cout << " but list1 has " << ptrList[0].use_count() << std::endl;
虽然ptr1不能访问那个A对象实例了,在vector哪里呢。所以不能执行析构函数。
那个不用smartptr的例子呢?
p***o
发帖数: 1252
18
来自主题: Programming版 - C++含有指针成员的类
ptr1都reset了, 自然相当于空指针, use_count是0。
你把vector里面那两个指针的use_count打出来就明白了。
(共0页)